0 0x41324aa8 in ?? () from /lib/librt.so.1
查看堆栈使用bt或者where命令

https://wenku.baidu.com/view/fb859ee55022aaea998f0f6b.html
gdb调试解决找不到源代码的问题
https://visualgdb.com/gdbreference/commands/disassemble
我们经常需要调试自己的动态库,但是不能跟踪到库的函数内部,按照下面的方法可以解决这个问题。
1、gcc -c -fPIC src.c -g -rdynamic
2、gcc -shared -o libtest.so src.o

disassemble main
disassemble /m addme

4、使用 objdump

1、调试步骤

A、使用 dmesg 命令,找到最近发生的段错误输入信息
root@# dmesg
[ 372.350652] a.out[2712]: segfault at 0 ip 080483c4 sp bfd1f7b8 error 6 in a.out[8048000+1000]
其中,对我们接下来的调试过程有用的是发生段错误的地址 0 和指令指针地址 080483c4。
有时候,“地址引起的错”可以告诉你问题的根源。看到上面的例子,我们可以说,int _ptr = NULL; _ptr = 10;,创建了一个空指针,然后试图访问它的值(读值)。

B、使用 objdump 生成二进制的相关信息,重定向到文件中
root@# objdump -d a.out > a.outDump
root@# ls
a.out a.outDump core test.c
其中,生成的 a.outDump 文件中包含了二进制文件的 a.out 的汇编代码

C、在 a.outDump 文件中查找发生段错误的地址
root@ubuntu:/home/tarena/project/c_test# grep -n -A 10 -B 10 “0” a.outDump
1-
2-a.out: file format elf32-i386
118:080483b4

设置 程序运行时优先查找目录
-L../lib -Wl,-rpath=../lib

2)适用场景
A、不需要 -g 参数编译,不需要借助于core文件,但需要有一定的汇编语言基础。

B、如果使用 gcc 编译优化参数(-O1,-O2,-O3)的话,生成的汇编指令将会被优化,使得调试过程有些难度。