gdb

ARM gdb调试函数显示问号

Posted by Jason on January 23, 2018

GDB是一个非常强大的调试工具,尤其是在查找segmentation fault原因时非常有用.但有时加载了core dump文件后,你会发现出错的地方函数显示是问号.怎么办呢?其实是共享库路径没设置对的原因.

首先启动gdb.

#查看共享库信息
(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
                        No          /lib/libpthread.so.0
                        No          /lib/libgcc_s.so.1
                        No          /lib/libc.so.6
                        No          /lib/ld-linux.so.3
#发现共享库的路径都是绝对路径,所以要设置库的根路径.
(gdb) set sysroot /work/xxx/xxx/
#载入要调试的二进制文件
(gdb) file xxx
#载入core dump文件
(gdb) core-file core
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x402084b4 in strlen () from /work/nfs_root/rootfs_NodeTest1.1/lib/libc.so.6

这样就找到了出现段错误的地方了,原来是调用strlen出错了,后面再根据哪里调用strlen找具体出错的地方.

这里遇到了一个坑,就是set sysroot,,之前用set solib-search-pathset solib-absolute-prefix,出错的地方都是显示问号,换成set sysroot就可以了,应该还是共享库的路径问题,有空再仔细深纠下.