用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

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