oracle 可执行文件,目标文件和可执行文件中的调试信息

目标文件和可执行文件中的调试信息

通常,您希望使用 -g 选项来编译源文件,以使程序的可调试性更好。-g 选项会使编译器将调试信息(采用 stabs 或 Dwarf 格式)与程序的代码和数据一起记录到目标文件中。

需要调试信息时,dbx 会根据需要解析和装入每个目标文件(模块)的调试信息。可以使用 module 命令让 dbx 装入任何特定模块或所有模块的调试信息。另请参见查找源文件和目标文件。

目标文件装入

将目标 (.o) 文件链接到一起后,链接程序可选择只将摘要信息存储到生成的装入对象中。dbx 可以在运行时使用此摘要信息从目标文件本身(而不是可执行文件)装入其余调试信息。生成的可执行文件占用的磁盘资源较小,但要求在 dbx 运行时能够使用目标文件。

使用 -xs 选项编译目标文件可覆盖此要求,从而使这些目标文件的所有调试信息在链接时都被放入可执行文件中。

如果使用目标文件创建归档库(.a 文件),并且在程序中使用归档库,则 dbx 会根据需要从归档库中提取目标文件。此时不需要原始目标文件。

将所有调试信息放入可执行文件的唯一缺点是会占用更多磁盘空间。由于运行时调试信息并未装入到进程映像中,因此程序运行速度不会降低。

使用 stabs 时的缺省行为是使编译器只将摘要信息放入可执行文件中。

DWARF 格式尚不支持目标文件装入。

注 -记录相同的信息时,使用 DWARF 格式要比使用 stabs 格式紧凑得多。但是,由于将全部信息都复制到可执行文件中,因此 DWARF 信息所占的空间看上去要比 stabs 信息所占的空间大。

列出模块的调试信息

module 命令及其选项有助于在调试会话期间跟踪程序模块。可使用 module 命令读入一个模块或所有模块的调试信息。一般情况下,dbx 会根据需要自动并且延后读入模块的调试信息。

要读入模块 name 的调试信息,请键入:(dbx) module [-f] [-q] name

要读入所有模块的调试信息,请键入:(dbx) module [-f] [-q] -a

其中:-a

指定所有模块。

-f

强制读取调试信息,即使该文件比可执行文件新也是如此。

-q

指定安静模式。

-v

指定冗余模式,在该模式下会输出语言、文件名等信息。这是缺省值。

要打印当前模块的名称,请键入:(dbx) module

列出模块

modules 命令通过列出模块名称来帮助您跟踪模块。

要列出包含已读入 dbx 的调试信息的模块的名称,请键入:(dbx) modules [-v] -read

要列出所有程序模块(不管它们是否包含调试信息)的名称,请键入:(dbx) modules [-v]

要列出包含调试信息的所有程序模块,请键入:(dbx) modules [-v] -debug

其中:-v

指定冗余模式,在该模式下会输出语言、文件名等信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值