问题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数组就好了,堆内存改成了栈内存