breakpad未生成minidump问题

问题1、进程退出时crash,堆内存异常导致callback函数中string失效

breakpad生成minidump流程

breakpad加log

重点熟悉以下3个文件:

src/client/linux/handler/exception_handler.cc

src/client/linux/minidump_writer/minidump_writer.cc

src/client/linux/minidump_writer/linux_dumper.cc

在根目录 make 编译,生成 ./src/client/linux/libbreakpad_client.a 静态链接库,将这个库编译到自己的运行二进制中,运行复现问题,然后log会打印到 /var/log/syslog 中。

上面的log可以确定 已经接收到了SIGSEGV = 11 ,并创建了一个新的进程来处理minidump。

继续加log:

这里加log看到 dmp文件已经创建了?

确实文件已经生成了。

minidump 已经创建但是重命名的时候出错

callback 创建描述符的时候 将 this指针传入,最后在callback的时候 content 也为 this。

说明前后 this指针地址不变。

地址不变,但是里面的内容已经被损坏了?

把内存地址全部打印出来,可以看到内存也是完整不变的

std::string 对应的地址:c_str[0x555555c5ed50]

这个地址是一个堆内存地址,地址没有变,但是对应的内容损坏了。

callback这个函数是在原来进程中处理的。

问题修复

把string改成 char数组就好了,堆内存改成了栈内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值