4

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

 1 year ago
source link: https://www.v2ex.com/t/917130
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  kkkbbb · 6 小时 52 分钟前 · 516 次点击
如果 c++程序崩溃产生的 core 文件定位发现是来自引用的三方库,有三方库源码,接下去如何定位具体的 core 的原因呢?怎么确定三方库 core 的位置呢?
10 条回复    2023-02-18 17:29:17 +08:00
liuguangxuan

liuguangxuan      6 小时 29 分钟前 via Android

如果是第三方开源库的话,崩溃的可能性较小,可以在编译的时候链接上 asan ,然后跑一边排查一下问题。
xh3ccc

xh3ccc      6 小时 28 分钟前 via iPhone

gdb 有 dir 命令可以添加新源码路径
changnet

changnet      5 小时 59 分钟前

0. 搜一下是否已知 bug
1. 如果是比较小的库,比如一个 lib ,编译一个 debug 版,拿 core 文件看数据
2. 如果是比较大的库,比如 libmysql 、glibc 这种,先考虑下调用方式是不是有问题或者版本是不是不对
3. 还排查不了,或者提个 issue 问一下更快些
4. 读源码,自己编译 debug 版去重现
FranzKafka95

FranzKafka95      5 小时 54 分钟前 via Android

如果有保留 symbol,addr2line 直接找源码对应的地方 debug
dearmymy

dearmymy      5 小时 53 分钟前

如果好复现就自己编译 debug 版本第三方库,会有 pdb 文件,配合 dump 文件,vs 附加可以很方便定位,
release 也有 pdb ,但是定位有时候不准。
MindMindMax

MindMindMax      5 小时 47 分钟前

如果核心转储来自外部库,可以使用 addr2line 等工具来确定核心转储发生在哪里。该工具可以使用库的符号信息,如函数和变量名,来确定故障的确切位置。

如果有库的源代码,可以使用 gdb 或 Valgrind 等调试器来调试核心转储。有了这些符号和调试信息,就可以找到故障的确切位置并进行修复。
jones2000

jones2000      5 小时 26 分钟前

源码编译出 pdb ,异常出 dump , 源码+pdb 就可以定位了。
kkkbbb

kkkbbb      4 小时 4 分钟前

导致出 core 的原因好像是调用三方库接口,导致三方库接口出现 double free ,引起崩溃,产生的 core 文件
sjkdsfkkfd

sjkdsfkkfd      52 分钟前 via iPhone

有源码就自己编一一下呗,然后该咋定位咋定位
kkkbbb

kkkbbb      41 分钟前

谢谢各位!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK