我一直在使用Google breakpad进行崩溃报告。它强调的一点是,一旦进程崩溃,就不应该分配内存。它表示,一旦崩溃,在一个进程中分配内存是不安全的。
这里'安全'究竟是什么意思?
答案 0 :(得分:4)
这不安全,因为标准库可能处于损坏状态,当你需要更多内存时会导致第二次崩溃。
如果你想打印某些东西,那就不用内存分配(例如使用局部变量)
答案 1 :(得分:3)
一旦进程崩溃,您可以期待的最好的方法就是在退出流程之前了解所发生的事情。因此,“安全性”会减少到您的错误报告代码,而不是在原始崩溃之上导致其自身崩溃。这就是为什么你在这一点上的选择是有限的:例如,尝试分配内存是危险的,因为原始崩溃可能是由损坏的堆引起的。
答案 2 :(得分:2)
崩溃后你真的不应该做任何过于复杂的事情,以免你在崩溃代码中挂起或崩溃。主要有两个原因:锁和全局变量。如果您的进程在持有锁时崩溃,并且您在崩溃后需要执行任何锁定,那么它将错误关闭,或者更糟糕的是,挂起。全局变量中还存储了大量状态信息。不仅仅是程序中声明的内容,还有库,甚至动态链接器/加载器使用的大量内容。如果其中任何一个都不好,调用使用其中一个全局变量的函数的结果是不可预测的。