-g

适用的调用

表 1. 接受给定选项的调用
选项 xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
-g
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

错误检查和调试

等效编译指示

无。

用途

生成调试信息以供符号调试器使用,并使程序状态可供调试会话在所选源位置使用。

程序状态是指程序执行过程中某些时刻用户变量的值。

可以使用不同的 -g 级别来平衡调试功能和编译器优化。 更高的 -g 级别以运行时或可能的编译时性能为代价提供更完整的调试支持,而更低的 -g 级别以调试会话中的某些功能为代价提供更高的运行时性能。

-O2 优化级别生效时,完全支持调试功能。

当高于 -O2 的优化级别生效时,调试功能将受限。

语法

表 2。 -g 针对两个类别的调用的语法
xlc/xlC 和其他遗留调用 xlclang/xlclang + + 调用命令
读取语法图跳过可视语法图-g0-g0123456789
读取语法图跳过可视语法图-g0-g012

缺省值

如果未指定 -g ,那么 -g0 将生效,这意味着编译器不会生成任何调试信息或保留程序状态。

如果指定了 -g ,那么缺省值如下所示:
  • 如果未启用优化 (-qnoopt) ,那么编译器将生成有关行号,源文件名称和变量的调试信息。 您可以在调试器中修改 这些变量的值。 基于 XL 的前端开始这也是 -g9 下的行为。基于 XL 的前端端
  • -O2 优化级别生效时, -g 等同于 -g2

参数

-g0
不生成调试信息。 不会保留程序 状态。
-g1
生成有关行号和源文件名称的最小只读调试信息。 不会保留程序 状态。 此选项等同于 -qlinedebug
-g2
生成有关行号、源文件名称和变量的只读调试信息。

-O2更高优化级别生效时,不会保留程序状态。

基于 XL 的前端开始-g3, -g4
生成有关行号、源文件名称和变量的只读调试信息。
-O2 优化级别生效时:
  • 不会保留程序 状态。
  • 函数 参数值在每个 函数开头可供调试器使用。
-g5, -g6, -g7
生成有关行号、源文件名称和变量的只读调试信息。
-O2 优化级别生效时:
  • 程序状态可用于调试器的 if 构造,循环构造, 函数 定义和 函数 调用。 有关详细信息,请参阅 使用情况
  • 函数 参数值在每个 函数开头可供调试器使用。
-g8
生成有关行号、源文件名称和变量的只读调试信息。
-O2 优化级别生效时:
  • 在每个可执行语句开头,调试器可以获得程序状态。
  • 函数 参数值在每个 函数开头可供调试器使用。
-g9
生成有关行号、源文件名称和变量的调试信息。 您可以在调试器中修改 这些变量的值。
-O2 优化级别生效时:
  • 在每个可执行语句开头,调试器可以获得程序状态。
  • 函数 参数值在每个 函数开头可供调试器使用。
基于 XL 的前端端

使用量

基于 XL 的前端开始

未启用优化时,如果指定 -g2 或更高级别,那么调试信息始终可用。 当 -O2 优化级别生效时,如果指定 -g5 或更高级别,那么调试信息在所选源位置可用。

当您使用 -O2指定 -g8-g9 时,调试信息在具有可执行语句的每个源行处都可用。

使用 -O2指定 -g5-g6-g7 时,调试信息可用于以下语言构造:
  • if 构造

    调试信息在每个 if 语句的开头 (即指定了 if 关键字的行) 提供。 它在 if 构造之后的下一个可执行语句开始时也可用。

  • 循环构造

    调试信息在每个 doforwhile 语句的开头提供,即在指定 doforwhile 关键字的行处提供。 它在 doforwhile 构造之后的下一个可执行语句开始时也可用。

  • 函数 定义

    调试信息在 function主体中的第一个可执行语句处提供。

  • 函数 调用

    调试信息在调用用户定义的 function 的每个语句的开头都可用。 它在包含 function 调用的语句之后的下一个可执行语句的开头也可用。

基于 XL 的前端端
基于 Clang 的前端开始

未启用优化时,如果指定 -g2,那么调试信息始终可用。

基于 Clang 的前端端

示例

使用以下命令来编译 myprogram.c 并生成名为 testing 的可执行程序以进行调试:
xlc myprogram.c -o testing -g 
以下命令将特定 -g 级别与 -O2 配合使用,以编译 myprogram.c 并生成调试信息:
xlc myprogram.c -O2 -g8 

相关信息