XL C/C++ 编译器诊断辅助

编译返回码
XL C/C++ 编译器列表
头部节
选项节
源代码节
错误消息格式
变换报告节
属性和交叉引用节
目标节
文件表节
编译单元收尾节
编译收尾节
调试已编译的应用程序

当编译应用程序遇到问题时,XL C/C++ 会发出诊断消息。您可以使用这些消息来帮助标识和更正这些问题。

本节提供由 XL C/C++ 提供的主要诊断消息的简短概述。有关可以帮助您解决应用程序的问题的相关编译器选项的更多信息, 请参阅 Options for error checking and debuggingOptions that control listings and messages

编译返回码

在编译结束时,在以下任何一种情况下,编译器将返回码设置为零:

否则,编译器将返回码设置为下列其中一个值:

返回码 错误类型
1 发生了严重性级别比 -qhalt 编译器选项的设置更高的错误。
40 发生了选项错误或不可恢复错误。
41 发生了配置文件错误。
250 发生了内存不够错误。编译器调用命令不能再分配任何内存供它使用。
251 发生了“已接收到信号”错误。即,发生了不可恢复错误或中断信号。
252 发生了“找不到文件”错误。
253 发生了输入/输出错误 - 不能读取或写入文件。
254 发生了派生错误。不能创建新的进程。
255 当进程运行时检测到错误。
注:
还会显示返回码来表示运行时错误。

XL C/C++ 编译器列表

头部节
选项节
源代码节
错误消息格式
变换报告节
属性和交叉引用节
目标节
文件表节
编译单元收尾节
编译收尾节

将根据 -qlist-qsource-qxref-qattr-qreport-qlistopt 编译器选项的设置,在输出列表中生成诊断信息。-S 选项在单独的文件中生成汇编程序列表。

如果编译器在编译应用程序时遇到编程错误,则编译器将一条诊断消息发送到标准错误设备,如果选择了适当的编译器选项,则还会发送到一个列表文件。

要通过列表的帮助找到问题的原因,可以参阅以下各项:

标题标识列表的每个主要节。节标题前有一串“大于”(>)号,以便您可以很容易找到它的开头:

>>>>> section name

可以通过指定适当的编译器选项来选择哪些节会出现在列表中。有关这些选项的更多信息,请参阅 Options for error checking and debuggingOptions that control listings and messages

头部节

列表文件有一个包含下列项的头部节:

头部节总是在列表中存在,它是第一行且仅出现一次。当存在多个编译单元时,将对每个编译单元重复下列各节。

选项节

选项节总是在列表中存在。每个编译单元都有一个单独的节。它指示对编译单元生效的指定选项。当您遇到有冲突的选项时此信息很有用。如果您指定 -qlistopt 编译器选项,则此节列示所有选项的设置。

源代码节

源代码节包含具有行号和文件号(可选)的输入源代码行。文件号指示产生源代码行的源文件(或包含文件)。所有主文件的源代码行(不是来自包含文件的那些行)都未打印文件号。每个包含文件都有一个与它相关联的文件号,来自包含文件的源代码行都打印了该文件号。文件号位于左边,行号位于文件号的右边,源代码行文本位于行号的右边。编译器将与每个文件相关的行进行编号。仅当 -qsource 编译器选项生效时,源代码行和与其相关联的号码才会出现。

如果 -qsource 选项生效,则错误消息散布在源列表中。在编译过程中生成的错误消息包含下列各项:

例如:

        7 |     for (i=0; i<100; i++) {
        8 |         for (j=0; j<100; j++) {
        9 |             a[i:j] = j;
"loop.c", line 9.16: 1506-277 (S) Syntax error: possible missing ',' or ']'?
       10 |         }
       11 |     }

如果 -qnosource 选项生效,则错误消息全部位于源代码节中,错误消息包括下列各项:

例如:

"loop.c", line 9.16: 1506-277 (S) Syntax error: possible missing ',' or ']'?

错误消息格式

C 和 C++ 诊断消息的格式为:

阅读语法图跳过直观语法图>>-15--cc-- ---nnn-- --+------------------------+--message_text-><
                       '-(--severity_letter--) -'
 

其中:

15cc nnn
指示 XL C/C++ 消息和组件号。
severity_letter
指示问题的严重性,如上一节所述。

编译错误可以具有下列严重性级别,这些严重性级别作为某些错误消息的一部分显示:

U
不可恢复错误。由于内部编译器错误,编译失败。
S
严重错误。由于下列其中一种原因,编译失败:
  • 存在编译器不能更正的情况。
  • 内部编译器表已溢出。程序的处理停止,XL C/C++ 未生成目标文件。
  • 包含文件不存在。程序的处理停止,XL C/C++ 未生成目标文件。
  • 检测到不可恢复的程序错误。停止处理源文件,XL C/C++ 未生成目标文件。通常可以通过修正编译期间报告的任何程序错误来改正此错误。
E
仅适用于 C 编译。编译器在源代码中检测到错误并尝试改正它。编译器将继续编译应用程序,但可能不会生成您期望的结果。
W
警告消息。编译器在源代码中检测到潜在的问题,但不会尝试改正它。编译器将继续编译应用程序,但可能不会生成您期望的结果。
I
参考消息。它不指示任何错误,只是一些您应知道以避免意外行为的信息。
'message text'
是描述错误的文本

缺省情况下,如果编译器遇到严重错误(严重性级别 S),则它停止而不会生成输出文件。您可以通过使用 -qhalt 选项指定不同的严重性,使编译器因为严重性较小的错误而停止。例如,使用 -qhalt=w 时,如果编译器遇到严重性为 W 或更高严重性的任何错误,则它停止。此技术可以减少检查程序的语法和语义有效性所需要的编译时间量。可以通过使用 -qflag 选项来限制较低严重性的消息而不停止编译器。

变换报告节

如果 -qreport 选项生效,则编译器生成一个变换报告,显示 XL C/C++ 是如何对程序进行优化的。本节显示对应于原始源代码的伪码,以便您可以查看 -qhot-qsmp 选项生成的并行化和循环变换。

属性和交叉引用节

本节提供关于在编译单元中使用的实体的信息。如果 -qxref-qattr 编译器选项生效,则该节存在。根据生效的选项,本节包含全部或部分关于在编译单元中使用的实体的下列信息:

如果您指定带 -qxref-qattrfull 子选项,则 C 和 C++ 会报告编译单元中的所有实体。如果您未指定此子选项,则仅出现您实际使用的实体。

目标节

仅当 -qlist 编译器选项生效时,XL C/C++ 才生成此节。它包含伪汇编程序目标代码列表,该列表显示源代码行号、以十六进制表示法表示的指令偏移量、指令的汇编程序助记符和指令的十六进制值。在右边,该节还显示指令的循环时间和编译器的中间语言。最后,将显示总循环时间(直线执行时间)和生成的机器指令总数。每个编译单元都有一个单独的节。

注:
要获取真实的汇编程序列表,在编译应用程序时指定 -S 编译器选项。汇编程序列表将命名为 filename.s。

文件表节

本节包含一个表,该表显示使用的每个主源文件和包含文件的文件号和文件名。 它还列示了引用包含文件的主源文件的行号。本节总是存在。

编译单元收尾节

这是每个编译单元的列表的最后一节。它包含诊断总结并指示单元是否编译成功。如果文件仅包含一个编译单元,则本节在列表中不存在。

编译收尾节

编译收尾节仅在列表的末尾出现一次。完成编译时,XL C/C++ 提供一个编译总结:读取的源记录数、编译开始时间、编译结束时间、总编译时间、总 CPU 时间和虚拟 CPU 时间。本节在列表中总是存在。

调试已编译的应用程序

在编译时指定 -g-qlinedebug 编译器选项将指示 XL C/C++ 编译器把调试信息包括在已编译的输出中。然后,可以使用 gdb 或其它任何的符号调试器来单步执行和检查已编译的应用程序的行为。