gdb回溯有和没有地址的帧

时间:2013-01-31 06:02:55

标签: gdb

当我做gdb bt时 - 我看到一些帧以地址开头而有些帧没有 - 为什么有些函数不以地址开头

#6  0x000000000041fd1d in func (argc=0, argv=0x8723a0, t=<value optimized out>) at file1.c:55
#7  record (argc=0, argv=0x8723a0, x=<value optimized out>) at file3.c:11

1 个答案:

答案 0 :(得分:1)

我相信record()是内联的,并且是另一个函数的一部分,它是一个上框架而func()没有内联。我猜是gdb选择以这种方式显示内联函数,如果它有符号信息。我用gdb 7.0。似乎早期版本的gdb没有以这种方式显示内联函数。

看,我和bt的情况大致相同:

Thread 1 (Thread 1405):
#0  0x00002ac752a93d17 in allocate (this=0x3716b1e0, __in_chrg=<value optimized out>) at /import/home/bc_prod1/bc/data/daily/PROF_HAS_LIBS_005.00/18.05.2012_15_19_04/i686-redhat-linux_5.0_-64/src/build/xalanc-1.11/xml-xalan/c/src/xalanc/Include/XalanList.hpp:537
#1  getListHead (this=0x3716b1e0, __in_chrg=<value optimized out>) at /import/home/bc_prod1/bc/data/daily/PROF_HAS_LIBS_005.00/18.05.2012_15_19_04/i686-redhat-linux_5.0_-64/src/build/xalanc-1.11/xml-xalan/c/src/xalanc/Include/XalanList.hpp:517
#2  end (this=0x3716b1e0, __in_chrg=<value optimized out>) at /import/home/bc_prod1/bc/data/daily/PROF_HAS_LIBS_005.00/18.05.2012_15_19_04/i686-redhat-linux_5.0_-64/src/build/xalanc-1.11/xml-xalan/c/src/xalanc/Include/XalanList.hpp:282
#3  xalanc_1_11::ICUBridgeCollationCompareFunctorImpl::~ICUBridgeCollationCompareFunctorImpl (this=0x3716b1e0, __in_chrg=<value optimized out>) at /import/home/bc_prod1/bc/data/daily/PROF_HAS_LIBS_005.00/18.05.2012_15_19_04/i686-redhat-linux_5.0_-64/src/build/xalanc-1.11/xml-xalan/c/src/xalanc/ICUBridge/ICUBridgeCollationCompareFunctorImpl.cpp:144

我的解释是,在第1帧的情况getListHead()中,来自第2帧的end()被内联,这就是为什么它们没有自己的地址而显示的原因。它们实际上是第3帧函数ICUBridgeCollationCompareFunctorImpl::~ICUBridgeCollationCompareFunctorImpl()的一部分,它实际上没有内联并且有地址。

顺便说一下,当我为第1帧,第2帧和第3帧disass时,我得到了相同的输出。