天天看點

coredump gdb 調試_GDB + CoreDump 調試記錄

今天遇到個問題,某人的代碼有斷錯誤,導緻我的工作無法展開,抱怨的就不多說了,正好讓我解決了一個gdb的操作問題!

現在說下gdb+coredump的調試流程

在實機上先打開産生core檔案的設定,ulimit -c unlimited  ,這将使程式在遇到斷錯誤的時候保留下當時的堆棧資訊,而這個core檔案的大小沒有進行限制,當然,還可以更改core檔案的産生路徑,具體可以google下。 之後運作斷錯誤程式,擷取産生的core檔案。

運用平台指定的gdb程式  調用arm-linux-gdb -c core

bt下

這時會看到#0  0x2ae1cc9e in ?? ()之類的堆棧資訊,因為沒有指定帶調試資訊的調試程式,是以無法讀書函數的符号表,是以顯示不出當時的堆棧運作到那個函數。

輸入file exec ,顯示出Reading symbols from /media/disk/work/ngi/work_space/ngi/out/target/product/high/system/usr/bin/testmode...done

說明加載進了符号表,在bt下就應該能看到堆棧的函數名了

(gdb) bt

#0  0x2ae1cc9e in ?? ()

#1  0x2ac02600 in ?? ()

#2  0x2ac02600 in ?? ()

奇怪 為什麼還是沒呢?  原來這時候程式是運作到動态庫中去了,那既然如此當然需要把動态庫中的符号表資訊讀入gdb咯!

事實是否如我猜測呢?

輸入info share

(gdb) info share

warning: .dynamic section for "/media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)

warning: .dynamic section for "/media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)

warning: Could not load shared library symbols for 60 libraries, e.g. /lib/libncore.so.

Use the "info sharedlibrary" command to see the complete listing.

Do you need "set solib-search-path" or "set sysroot"?

From        To          Syms Read   Shared Object Library

No          /lib/libncore.so

No          /lib/libicuuc.so

No          /lib/liblog.so

No          /lib/libncutility.so

No          /lib/libncplatform.so

No          /lib/libncdevice.so

No          /lib/libnhcommon.so

No          /lib/libnhdiag.so

No          /lib/libnhucom.so

No          /lib/libnhkey.so

No          /lib/libnhsysctrl.so

No          /lib/libzeromq.so

No          /lib/libbinder.so

No          /lib/libnceventsys.so

No          /usr/lib/libncgstreamer.so

No          /lib/libGLESv1_CM.so

No          /lib/libEGL.so

No          /lib/libGAL.so

No          /usr/lib/libncgraphics.so

No          /usr/lib/libGraphicsCore.so

No          /usr/lib/liboverlay.so

No          /usr/lib/libtuner.so

No          /usr/lib/libsourceusbapi.so

No          /usr/lib/libsourceusb.so

No          /usr/lib/libnhbtproxy.so

No          /usr/lib/libgmock.so

No          /lib/libncstorage.so

No          /lib/libnhvehicle.so

No          /lib/libnhcanbus.so

0x2ae83e80  0x2ae91fdc  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libpthread.so.0

0x2adb56a0  0x2adb8e58  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/librt.so.1

0x2adc38fc  0x2adc4614  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libdl.so.2

No          /lib/libstdc++.so.6

0x2b0f61a8  0x2b15a9b8  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libm.so.6

No          /lib/libgcc_s.so.1

0x2b179440  0x2b262044  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/libc.so.6

0x2aaef780  0x2ab07a20  No          /media/disk/work/ngi/work_space/ngi/prebuilts/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/lib/ld-linux.so.3

No          /lib/libutils.so

可以看到很多庫的符号表都沒有被讀入,看來果然如此。

輸入用set solib-search-path + 庫的路徑 指定所要讀取的符号表動态庫所在位置,結果會看到很多done之類的資訊,說明加載成功,

現在bt下就能看到堆棧的詳細資訊了。

(gdb) bt

#0  nutshell::SourceUSB_ScannerThread::setScannerState (this=0x0,

state=nutshell::SourceUSB_ScannerThread::SCANNERSTATE_START)

at system/MediaLibrary/SourceUSB/src/Thread_Scanner/SourceUSB_ScannerThread.cpp:138

#1  0x2ae1ce1a in nutshell::SourceUSB_Scanner_EventHandler::onHandle (this=0xaf4a0, cEvt=...)

at system/MediaLibrary/SourceUSB/src/Thread_Scanner/SourceUSB_Scanner_EventHandler.cpp:50

#2  0x2ae17018 in nutshell::SourceUSB_EventHandlerBase::onHandle (this=, cEvt=)

at system/MediaLibrary/SourceUSB/src/include/base/SourceUSB_EventHandlerBase.h:35

#3  0x2abe85b6 in nutshell::PI_EventHandlerThreadImp::run (this=0xaef88)

at system/MediaLibrary/common/TsmThreadLib/src/PI_EventHandlerThreadImp.cpp:93

#4  0x2ac04e34 in ?? ()

#5  0x2ac04e34 in ?? ()

之後就是去告訴某人這個問題所在了