为 C++ 程序选择 DEBUG 编译器子选项
本主题描述可用调试方案,以及如何通过选择正确的 DEBUG 编译器子选项来创建特定的调试方案。
C++ 编译器提供 DEBUG 编译器选项及其子选项来控制以下操作:
- 语句和符号表的生成和放置。
- 将调试信息放置到程序对象或单独的调试文件中。
z/OS® Debugger 不支持调试优化的 C 程序。 不要使用 NOOPTIMIZE 或 OPTIMIZE(0) 以外的任何 OPTIMIZE 编译器选项。
以下指示信息可帮助您选择提供调试程序时所需功能的 DEBUG 编译器子选项的组合:
- 从以下列表中选择调试方案(请记住您的站点资源):
- 方案 A: 要获取最大的 z/OS Debugger 功能,更小的程序大小和更好的性能,请使用下列其中一个组合:
DEBUG(FORMAT(DWARF),HOOK(LINE,NOBLOCK,PATH),SYMBOL,FILE(file_location))无论您仅使用 .dbg 文件还是同时使用 .mdbg 文件,编译器选项都是相同的。
- 方案 B: 要获取所有 z/OS Debugger 功能,但具有更大的程序大小,并且不希望在单独的文件中显示调试信息,请使用以下组合:
DEBUG(FORMAT(ISD),HOOK(LINE,NOBLOCK,PATH),SYMBOL) - 方案 C: 您可以通过使用
NODEBUG编译器选项进行编译来获取一些 z/OS Debugger 功能。 这要求您以反汇编方式调试程序。 - 方案 D: 如果使用 z/OS C/C++ 版本 2.3 或更高版本进行编译,请使用以下组合来获取最大的 z/OS 调试器 功能,而不使用单独的文件来获取调试信息:
DEBUG(FORMAT(DWARF),NOFILE,HOOK(LINE,NOBLOCK,PATH),SYMBOL) GOFF调试数据不会增加已装入程序的大小。 除非在调试程序时需要装入调试数据,否则程序对象的大小会增加但不会增加内存中的占用量。 调试数据始终与可执行文件匹配,并且始终可用,因此不需要搜索数据集的列表。
对于所有场景,如果要使用其他 Application Delivery Foundation for z/OS 工具,请参阅 IBM® Application Delivery Foundation for z/OS Common Components Customization Guide and User Guide ,以确保指定创建所有 Application Delivery Foundation for z/OS 工具所需的文件所需的所有编译器选项。
- 方案 A: 要获取最大的 z/OS Debugger 功能,更小的程序大小和更好的性能,请使用下列其中一个组合:
- 对于所选方案,请验证您是否具有以下资源:
- 对于方案 A,请执行以下任务:
- 对于方案 C,请执行以下步骤:
- 如果使用 动态调试 工具将挂钩放入驻留在只读存储器中的程序中,请与系统管理员验证您是否有权这样做
- 启动 z/OS Debugger后,通过输入
QUERY DYNDEBUG命令来验证是否未取消激活 动态调试 工具。
- 验证您是否需要执行以下任何任务:
- 可以按任意顺序指定 C++
DEBUG子选项的任意组合。 缺省子选项为BLOCK、LINE、PATH和SYM。 编译程序时,请勿使 SYSIN 与流中的数据集 (例如, // SYSIN DD *) 相关联,因为 z/OS Debugger 需要访问您正在调试的程序的源的永久数据集。
- 如果指定级别高于 0 的
OPTIMIZE编译器选项,那么不会为行、块或路径点生成挂钩,并且不会生成符号表。 系统仅为已优化程序生成函数入口点和出口点的挂钩。TEST编译器选项具有相同的限制。 - 不能从命令行调用用户定义的函数。
- 可以按任意顺序指定 C++
选择编译器选项和子选项后,请参阅 规划调试会话 以确定必须完成的下一个任务。
请参阅以下主题,以获取与本主题中讨论的材料相关的更多信息。
- 相关参考
- z/OS XL C/C++ User 's Guide 中的
DEBUG编译器选项的描述
1 在可以指定环境变量的情况下,可以将环境变量 EQA_USE_MDBG 设置为 YES 或 NO ,这将覆盖 EQAOPTS
MDBG 命令的任何设置 (包括缺省设置)。2 在可以指定环境变量的情况下,可以将环境变量 EQA_USE_MDBG 设置为 YES 或 NO ,这将覆盖 EQAOPTS
MDBG 命令的任何设置 (包括缺省设置)。