请问个 c++ 崩溃定位问题

2023-02-18 11:17:47 +08:00
 kkkbbb
如果 c++程序崩溃产生的 core 文件定位发现是来自引用的三方库,有三方库源码,接下去如何定位具体的 core 的原因呢?怎么确定三方库 core 的位置呢?
1671 次点击
所在节点    程序员
10 条回复
liuguangxuan
2023-02-18 11:40:59 +08:00
如果是第三方开源库的话,崩溃的可能性较小,可以在编译的时候链接上 asan ,然后跑一边排查一下问题。
xh3ccc
2023-02-18 11:42:13 +08:00
gdb 有 dir 命令可以添加新源码路径
changnet
2023-02-18 12:11:27 +08:00
0. 搜一下是否已知 bug
1. 如果是比较小的库,比如一个 lib ,编译一个 debug 版,拿 core 文件看数据
2. 如果是比较大的库,比如 libmysql 、glibc 这种,先考虑下调用方式是不是有问题或者版本是不是不对
3. 还排查不了,或者提个 issue 问一下更快些
4. 读源码,自己编译 debug 版去重现
FranzKafka95
2023-02-18 12:15:59 +08:00
如果有保留 symbol,addr2line 直接找源码对应的地方 debug
dearmymy
2023-02-18 12:17:06 +08:00
如果好复现就自己编译 debug 版本第三方库,会有 pdb 文件,配合 dump 文件,vs 附加可以很方便定位,
release 也有 pdb ,但是定位有时候不准。
MindMindMax
2023-02-18 12:22:40 +08:00
如果核心转储来自外部库,可以使用 addr2line 等工具来确定核心转储发生在哪里。该工具可以使用库的符号信息,如函数和变量名,来确定故障的确切位置。

如果有库的源代码,可以使用 gdb 或 Valgrind 等调试器来调试核心转储。有了这些符号和调试信息,就可以找到故障的确切位置并进行修复。
jones2000
2023-02-18 12:44:13 +08:00
源码编译出 pdb ,异常出 dump , 源码+pdb 就可以定位了。
kkkbbb
2023-02-18 14:06:28 +08:00
导致出 core 的原因好像是调用三方库接口,导致三方库接口出现 double free ,引起崩溃,产生的 core 文件
sjkdsfkkfd
2023-02-18 17:18:20 +08:00
有源码就自己编一一下呗,然后该咋定位咋定位
kkkbbb
2023-02-18 17:29:17 +08:00
谢谢各位!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/917130

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX