跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
dbx 可以采用两种方法识别宏定义:
如果使用缺省 DWARF 格式调试信息,在以 -g3 选项进行编译时,编译器会提供定义。如果编译时指定 -xdebugformat=stabs 选项,则不提供定义。
dbx 可以通过略读源文件及其包含文件来重新创建定义。准确的重新创建取决于对原始源文件及包含文件的访问情况。这还取决于所使用编译器的路径名的可用性以及编译器选项(如 -D 和 -I)。可以从 Oracle Solaris Studio 编译器(但不能从 GNU 编译器)以 DWARF 和 stabs 格式提供该信息。有关确保成功略读的信息,请参见略读 (skimming) 错误和使用 pathmap 命令改进略读 (skimming)。
dbx 使用两种方法中的哪一种方法识别宏定义由 dbx 环境变量 macro_source 控制(请参见第 3 章中的 表 3-1。)
在选择希望 dbx 使用的方法时,需要考虑多种因素。
一个因素是不同类型信息的可用性,这些信息取决于用于生成代码的编译器和编译器选项。下表显示了可根据编译器和调试信息选项选择的方法。
表 C-1 可用于各种生成选项的宏定义方法
|
另一个要考虑的因素是根据选择的方法在功能方面进行权衡。
可执行文件的大小。略读方法的主要优点是不需要使用 -g3 选项进行编译,因为该方法适用于使用 -g 选项编译而生成的较小可执行文件。
调试格式。略读适用于 DWARF 和 stabs。使用 -g3 选项进行编译以通过编译器获得定义仅适用于 DWARF。
速度。第一次针对 dbx 尚未读取调试信息的模块对表达式求值时,略读最多需要一秒钟。
准确性。使用 -g3 选项进行编译时,编译器提供的信息比略读提供的信息更稳定、更准确。
生成环境的可用性。略读要求编译器、源代码文件以及包含文件在调试过程中可用。dbx 不会检查这些过期的项,因此,如果这些项有可能发生更改,准确性可能会下降,所以使用 -g3 选项进行编译可能好于依靠略读。
在与编译代码的系统不同的系统上进行调试。如果在系统 A 上编译代码而在系统 B 上进行调试,则 dbx 使用 NFS 并借助 pathmap 命令访问系统 A 上的文件(请参见使用 pathmap 命令改进略读 (skimming))。
pathmap 命令还有助于在略读期间访问文件。它适用于程序的源文件以及包含文件。但是,它可能不适用于系统包含文件,因为 /usr/include 通常不通过 NFS 提供,因此宏定义是从调试系统(而非生成系统)上的 /usr/include 提取的。
您可以选择了解并容许系统包含文件之间可能存在的差异,或者选择使用 -g3 选项进行编译。
虽然 Fortran 编译器通过 cpp(1) 函数或 fpp(1) 函数支持宏,但 dbx 不支持 Fortran 的宏扩展。
dbx 会忽略使用 -g3 选项和 -xdebugformat=stabs 选项进行编译而生成的宏信息。
略读适用于使用 -g 选项和 -xdebugformat=stabs 选项编译的代码。