我应该通过单独的过程编写自己的崩溃转储还是依赖WER
Should I write my own crash dump via separate process or rely on WER?
目前我的信息是(让我们将上下文保留在Windows-7上,因为WER在Win XP上的工作方式不同),我有两种方法可以为我的应用程序获取全内存崩溃转储:
我可以设置WER来生成应用程序的本地全内存转储
信息如下:http://msdn.microsoft.com/en-us/library/bb787181%28v=vs.85%29.aspx
- 添加(也适用于32位应用程序。不要使用SysWow64节点)
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps
密钥(可能是应用程序特定的子密钥...LocalDumpsMyApplication.exe
) - 将
DumpType
设置为2 - 根据需要调整其他设置
注意:由于我们的应用程序是自定义部署的,因此设置此注册表值不是问题。
这似乎给了我一个简单的演示应用程序相当可靠的崩溃转储。
或者,我可以自己编写垃圾堆——适当地使用看门狗程序和所有程序
我使用MiniDumpWriteDump
来编写转储,并通过看门狗进程(如本文所述)来完成此操作,以最大限度地降低失败风险。
问题
那么,哪种方法更好呢?考虑到,当我自己做这件事时,我谨慎地将我在崩溃处理程序中所做的事情保持在最低限度,我想知道WER方法是否同样可靠,或者WER方法在过程中是否做了更多的事情可能会失败。有什么想法/经验吗?
除了自己动手,您还可以查看Google Breakpad,它是一个用于生成和处理崩溃转储的库和工具集。
相关文章:
- 在Windows上调试linux崩溃转储
- 如何从核心转储文件中识别导致崩溃的完整命令
- 是否可以以编程方式创建迷你转储文件而不会崩溃?
- 故障转储文件是否需要崩溃时正在运行的本地文件
- QNX - 崩溃时未生成核心转储
- QT应用程序崩溃但不容易复制,我捕获了转储堆栈以及如何通过堆栈找到源代码
- pthread_join崩溃与核心转储段错误
- 我应该通过单独的过程编写自己的崩溃转储还是依赖WER
- 如何在c++中用程序禁用崩溃转储
- 有没有为mac和win应用程序创建和上传崩溃转储的服务
- 使用fopen for file时,matlab在没有转储文件的情况下崩溃
- 使用小型转储和 GDB 分析崩溃,以便 mingw 编译的可执行文件
- 可视C++程序崩溃,但未生成转储文件.为什么
- Eclipse (C++) 崩溃 无法写入核心转储.核心转储已被禁用
- 在Windows上使用gcc崩溃后转储堆栈
- While循环导致堆栈转储,程序在C++中崩溃
- 每当应用程序崩溃时,为其创建一个转储文件
- 我运行一个程序并遇到分段错误(核心转储),我使用 gdb 进行调试,程序在运行 ui->setupUI() 时崩溃了
- 在Android NDK中捕获C++信号,并且仍然打印崩溃转储
- 为c++应用程序创建崩溃转储报告