必须用 -g 或 -g0 选项对程序进行编译,以便为使用 dbx 进行调试做好准备。
例如,要使用 C++ 编译器进行编译,请键入:
% CC -g example_source.cc |
对于 C++ 编译器:
单独使用 -g 选项(不指定优化级别)时,将打开调试信息并关闭函数的内联。
-g 选项与 -O 选项或 -xOlevel 选项结合使用时,将打开调试信息,但不关闭函数的内联。该组选项将产生有限的调试信息和内联的函数。
--g0(零)选项将打开调试信息,但不影响函数的内联。不能调试使用 --g0 选项编译的代码中的内联函数。--g0 选项可明显缩短链接时间和 dbx 启动时间(取决于程序对内联函数的使用)。
要编译将使用 dbx 调试的优化代码,请使用 -O(大写字母 O)和 -g 选项来编译源代码。
dbx 允许您在 objcopy 命令(在 Linux 平台上)和 gobjcopy 命令(在 Solaris 平台上)中使用选项,将调试信息从可执行文件复制到独立的调试文件、从可执行文件中删除该信息,以及在这两个文件之间创建链接。
dbx 按照以下顺序搜索独立的调试文件,并从找到的第一个文件中读取调试信息:
包含可执行文件的目录。
包含可执行文件的目录中名为 debug 的子目录。
全局调试文件目录的子目录;如果 dbx 环境变量 debug_file_directory 设置为该目录的路径名,您可以查看或更改该目录。环境变量的缺省值为 /usr/lib/debug。
例如,要为可执行文件 a.out 创建独立的调试文件,应执行以下操作。
创建包含调试信息的、名为 a.out.debug 的独立调试文件:
objcopy --only-keep-debug a.out a.out.debug |
从 a.out 中删除调试信息:
objcopy --strip-debug a.out |
在两个文件之间建立链接:
objcopy --add-gnu-debuglink=a.out.debug a.out |
在 Solaris 平台上,使用 gobjcopy 命令。在 Linux 平台上,使用 objcopy 命令。
在 Linux 平台上,可以使用 objcopy -help 命令来确定该平台是否支持 -add-gnu-debuglink 选项。可以使用 cp a.out a.out.debug 命令替换 objcopy 命令的 -only-keep-debug 选项,以便使 a.out.debug 成为完全可执行文件。