首先、查看我们的程序运行报的段错误信息
通过命令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