用gdb交叉調試core文件

gdb調試core環境配置

  1. 啓動gdb調試bin和core

    ~/PATH/TO/CROSS/COMPILE/TOOLCHAINS$ ./A_platform-aarch64-gdb BIN_FILE CORE-FILE

  2. 提示so找不到,需要設置so search path;
    使用:
    set solib-search-path /PATH/TO/CROSS/COMPILE/TOOLCHAINS/SYSROOT/:/SOME/SELF/COLLECTED/SO/LIBS/

  3. 未load symbol的庫需要單出處理
    設置search path之後,一個庫提示
    libABC.so.3 could not be validated and will be ignored.

0x000000007816f000  0x0000000078194590  Yes         /SOME/SELF/COLLECTED/SO/LIBS/libABCDE.so(找到的so)
                                        No          /PATH/TO/CROSS/COMPILE/TOOLCHAINS/libABC.so.3(未找到的so)

對於這個庫,從系統鏡像裏find, pull,出來,放到一個solib-search-path下面,比如sysrootlibs. 然後重置下 solib-search-path就可以load成功

0x000000007816f000  0x0000000078194590  Yes         /SOME/SELF/COLLECTED/SO/LIBS/libABCDE.so
0x0000000078195000  0x00000000781df3e8  Yes (*)     /PATH/TO/CROSS/COMPILE/TOOLCHAINS/libABC.so.3

其他找不到,或無法validate的庫,類似操作;

  1. 最後,core文件的bt
(gdb) bt
#0  __strlen_isr () at /A/B/C/D/lib/c/string/aarch64/strlen.S:147
#1  0x00000000101513bc in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

gdb調試core命令

  • 查看所有線程正在運行的指令信息
    info threads

  • 打開所有線程的堆棧信息
    thread apply all bt

  • 查看指定線程堆棧信息:threadapply threadID bt,如:
    thread apply 6 bt

  • 進入指定線程棧空間
    thread threadID

  • 查看堆棧
    bt
    where

  • 查看庫加載情況
    info sharedlibrary

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章