c++ core dump 调试
堆栈地址中 so 地址
有时候堆栈地址中有类似于 xxx.so + 0x1234
这样的,可以使用 objdump -DS xxx.so | grep -6 1234
这样来查看这个地址附近的代码,注意 0x1234 这样的地址结尾需要是手动调整为 4 的倍数,因为是 32bit 芯片。 或者也可以先把数据 dump 到一个 txt 文件中,然后在慢慢查看。
查看到相应的函数名称之后,可以使用 c++filt z4xyz
这样的方法,获得正常的 c++ 名称。
参考: https://blog.csdn.net/afei__/article/details/81181827
https://blog.csdn.net/ZZ7ZZ7ZZ/article/details/42238115
gdb 调试
- 使用
set verbose on
可以打开更多的信息打印。 - 崩了之后,可以使用
bt
来打印堆栈信息,bt full
打印堆栈的详细信息。 参考: https://www.it610.com/article/1279393691374469120.htm
https://www.169it.com/tech-qa-linux/article-1067160896160685656.html - 编译的时候,最好加上
-g3 -ggdb
参考: https://blog.csdn.net/astrotycoon/article/details/8119048
查看连接的库
使用 ldd your_exe
就可以查看具体内部链接了哪些动态库。
参考:
https://www.cnblogs.com/baiduboy/p/6830464.html
https://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.html
https://www.cnblogs.com/dongzhiquan/p/11939391.html
https://www.cnblogs.com/dongzhiquan/category/294212.html?page=2
https://documentation.suse.com/zh-cn/sled/15-SP2/html/SLED-all/cha-tuning-systemd-coredump.html
https://zhuanlan.zhihu.com/p/41153588
http://www.jinbuguo.com/systemd/systemd-coredump.html