TL;DR为同一个崩溃事件编写多个转储是否有意义,如果是,您需要注意什么。
MiniDumpWriteDump
当我们的应用程序中存在未处理的异常 / 中止 / younameit 时,我们会使用它来编写故障转储。
到目前为止的代码实际上写了两个转储:
- 一个
MiniDumpWithDataSegs
可以得到一个小的,即使是糟糕的电子邮件,一旦压缩就可以发送,没有问题。 - 如果
MiniDumpWithFullMemory
我们需要,可以提供完整的信息。
为了完成这项工作,我们调用MiniDUmpWriteDump
了两次:
1 Open/create file for small dump
2 Write small dump
3 Open/create file for large dump
4 Write large dump
据我所知,这个方案的一个附加想法是编写小转储更快。基本上总是亚秒级,而写入大转储通常需要几秒钟,特别是当应用程序完全加载并且大转储很容易达到 1.2 GB 或更多时。
据我所知,首先编写小转储的想法是,因为它更快,它会在崩溃的时间点对崩溃的进程进行更详细的快照,因为该进程是多线程的。
显然,进程的线程在第一次调用结束和第二次调用 MDWP 开始之间继续运行,所以我们确实有很多情况,小转储中的信息实际上比大转储。
考虑到这一点之后,我会假设要写入转储,MiniDumpWriteDump
无论如何都必须挂起进程的线程,所以如果我们先写大转储,我们会让大转储比小转储更准确。
问题
我们应该在小转储之前写大转储吗?我们甚至应该写两个转储吗?我们能否以某种方式让系统首先挂起进程的线程,然后编写两个完全“同步”的转储?