【发布时间】:2013-12-25 13:28:00
【问题描述】:
我一直在与Google breakpad 合作进行崩溃报告。它强调的一件事是,一旦进程崩溃,就不应该分配内存。它说一旦进程崩溃,在进程中分配内存是不“安全的”。
这里的“安全”到底是什么意思?
【问题讨论】:
-
如何让程序执行,然后在收到SIGABRT后分配内存?
-
有可能!您可以为 SIGABRT 和 SIGSEGV 设置处理程序并在那里分配内存。我使用该方法在 QT 应用程序中显示带有堆栈跟踪的 BSOD。在调用
new QWidget并显示必要的信息后,我只需使用 `sleep(1)' 结束崩溃的线程进入无限循环。 -
@loentar 当然不是说你不能分配内存。据我所知,微软的 minidump 进程分配内存。但是这个崩溃报告引擎明确警告不要这样做。