当我执行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发布于 2013-01-31 16:42:37
我相信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()是内联的,这就是为什么它们显示时没有自己的地址。它们实际上是frame 3函数ICUBridgeCollationCompareFunctorImpl::~ICUBridgeCollationCompareFunctorImpl()的一部分,该函数实际上没有内联,并且有其地址。
顺便说一下,当我对第1帧、第2帧和第3帧执行disass时,我得到了相同的输出。
https://stackoverflow.com/questions/14619440
复制相似问题