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
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
record()
インライン化されており、アッパーフレームでインライン化されていない別の機能の一部であると思いますfunc()
。gdb
シンボル情報がある場合は、このようにインライン関数を表示することを選択していると思います。gdb7.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
私の説明では、getListHead()
フレーム1からend()
の私の状況では、フレーム2からがインライン化されていたため、自分のアドレスなしで表示されています。これらは実際にはフレーム3関数の一部でICUBridgeCollationCompareFunctorImpl::~ICUBridgeCollationCompareFunctorImpl()
あり、実際にはインライン化されておらず、そのアドレスがあります。
ちなみに、disass
フレーム1、フレーム2、フレーム3の場合、同じ出力が得られます。