为 C++ 程序选择 DEBUG 编译器子选项

本主题描述可用调试方案,以及如何通过选择正确的 DEBUG 编译器子选项来创建特定的调试方案。

C++ 编译器提供 DEBUG 编译器选项及其子选项来控制以下操作:

  • 语句和符号表的生成和放置。
  • 将调试信息放置到程序对象或单独的调试文件中。

z/OS® Debugger 不支持调试优化的 C 程序。 不要使用 NOOPTIMIZE 或 OPTIMIZE(0) 以外的任何 OPTIMIZE 编译器选项。

以下指示信息可帮助您选择提供调试程序时所需功能的 DEBUG 编译器子选项的组合:

  1. 从以下列表中选择调试方案(请记住您的站点资源):
    • 方案 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 工具所需的文件所需的所有编译器选项。

  2. 对于所选方案,请验证您是否具有以下资源:
    • 对于方案 A,请执行以下任务:
      • 如果创建 .mdbg 文件,请执行以下任务:
        1. 对 EQAOPTS MDBG 命令指定 YES (需要 z/OS Debugger 在 .mdbg 文件中搜索 .dbg 文件)1
        2. 验证 .dbg 文件是否为非临时文件。
        3. 使用dbgld命令的 -c 选项或CDADBGLD实用程序的CAPSRC选项,创建包含捕获源代码的.mdbg文件。
        4. 验证 .mdbg 文件是否是非临时文件。
      • 如果仅使用 .dbg 文件,请验证 .dbg 文件是否为非临时文件,并对 EQAOPTS MDBG 命令2指定 NO。
    • 对于方案 C,请执行以下步骤:
      1. 如果使用 动态调试 工具将挂钩放入驻留在只读存储器中的程序中,请与系统管理员验证您是否有权这样做
      2. 启动 z/OS Debugger后,通过输入 QUERY DYNDEBUG 命令来验证是否未取消激活 动态调试 工具。
  3. 验证您是否需要执行以下任何任务:
    • 可以按任意顺序指定 C++ DEBUG 子选项的任意组合。 缺省子选项为 BLOCKLINEPATHSYM
    • 编译程序时,请勿使 SYSIN 与流中的数据集 (例如, // SYSIN DD *) 相关联,因为 z/OS Debugger 需要访问您正在调试的程序的源的永久数据集。

    • 如果指定级别高于 0 的 OPTIMIZE 编译器选项,那么不会为行、块或路径点生成挂钩,并且不会生成符号表。 系统仅为已优化程序生成函数入口点和出口点的挂钩。 TEST 编译器选项具有相同的限制。
    • 不能从命令行调用用户定义的函数。

选择编译器选项和子选项后,请参阅 规划调试会话 以确定必须完成的下一个任务。

请参阅以下主题,以获取与本主题中讨论的材料相关的更多信息。

  • 相关参考
  • 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 命令的任何设置 (包括缺省设置)。