objdump -W看到行号,objdump -drl和gdb不行?

时间:2015-02-13 11:07:34

标签: gdb libtool objdump

有许多问题缺少源文件等,我尝试了所有我找不到的东西。

这是关于我的图书馆,有一些帮助应用程序。我使用autotools(和libtool)。

我已经使用-g编译了我的代码并且没有进行优化(后来尝试使用-ggdb3并且没有可观察到的差异w.r.t这个问题)。我在已安装的文件上尝试了gdb,并且libtool --mode=execute gdb build/dir/file没有区别。

如果我使用objdump -W,我可以看到以下内容(让我们采用随机函数并仅跟踪它):

$ objdump /usr/bin/that_file

 ...
 <1><a11>: Abbrev Number: 38 (DW_TAG_subprogram)
    <a12>   DW_AT_name        : (indirect string, offset: 0xbcc2): fill_memory  
    <a16>   DW_AT_decl_file   : 4       
    <a17>   DW_AT_decl_line   : 98      
    <a18>   DW_AT_prototyped  : 1       
    <a18>   DW_AT_type        : <0x3c>  
    <a1c>   DW_AT_low_pc      : 0x4010ce        
    <a24>   DW_AT_high_pc     : 0x92 0x0        
    <a2c>   DW_AT_frame_base  : 1 byte block: 9c        (DW_OP_call_frame_cfa)
    <a2e>   DW_AT_GNU_all_tail_call_sites: 1    
    <a2e>   DW_AT_sibling     : <0xa83> 
 ...

 The Directory Table:
 ...
 ../../../apps/calibrator
 ...

 The File Name Table:
 ...
 4     2       0       0       main.c
 ...

您可以看到符号位于../../../apps/calibrator/main.c的第98行,相对于文件的构建位置。如果我使用gdb,并执行info sources(在运行之前),我得到:

(gdb) info sources
Source files for which symbols have been read in:



Source files for which symbols will be read in on demand:

..., /path/to/my/library/apps/calibrator/main.c

这意味着gdb正确地看到了该源文件。如果我打破main.c中的某个函数(例如main),我会看到该文件仍在“将按需读取”的文件中,而不是已经读取的文件。

如果我info source,此时它会告诉我“没有当前的源文件”。如果我使用objdump -dl,我会看到:

00000000004010ce <fill_memory>:
fill_memory():
  4010ce:       55                      push   %rbp
  4010cf:       48 89 e5                mov    %rsp,%rbp
  ...

因此objdump -dl也看不到与该符号关联的文件/行号。如果在gdb中,我会list main,我会收到“没有为主号码知道的行号。”

objdump -dl为什么objdump -W没有看到行号?我错过了什么?

0 个答案:

没有答案