菜鸟笔记
提升您的技术认知

使用addr2line定位so文件段错误的问题

首先、查看我们的程序运行报的段错误信息

通过命令dmesg -T| tail查看,或者查看日志/var/log/message

[root@prime complibs]# dmesg -T| tail
[一 8月 30 02:22:24 2021] compseche_default[17560]: segfault at 0 ip 00007f92507e5d32 sp 00007f9234d6c7c0 error 6 in libobj.so [7f92507c9000+33000]

然后,此时我们使用Windows自带的计算器来计算:

被减数:ip的地址值 00007f92507e5d32

减数:libobj.so后面的地址7f92507c9000

做减法得到位移 1CD32

最后、我们进入libobj.so所在的目录,使用addr2line命令来定位段错误的位置

addr2line -e libobj.so -f 1CD32
_objsr_add_node
/home/prime/cpp/obj/obj_info.c:281

 定位到问题是出在了/home/prime/cpp/obj/obj_info.c:281这里,出错的函数是_objsrc_add_node