今天为了生成转储文件,我使用 SysInternals 工具 ProcDump,并在 cmd 窗口中运行这样的命令:
:loop
net stop "MyService"
net start "MyService"
echo Monitoring Access violations
procdump.exe -e -g -ma MyApplication.exe MyDumpFile.dmp > log.txt
goto loop
但是有另一种方法可以直接告诉 Windows 在一个应用程序崩溃时创建转储吗?
例如,我找到了这个注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
这使得 Windows 能够生成转储,但仅限于系统崩溃时。
是否有等效的 key 或 Windows 设置用于在一个应用程序或服务崩溃时生成转储?
它将由 QA 服务使用,我希望它的侵入性尽可能小。运行 procdump 对他们来说就像一个附加工具,一个插入工具。
最佳答案
确实有,来自MSDN您需要创建此 key :
HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
然后填充所需的设置:
DumpFolder
- 相当于用户文件夹的小型转储文件夹,即存储转储的位置。由于这是针对每个用户的,因此用户将需要对该位置的写入权限。DumpType
- 是否执行完整内存转储,或仅执行小型转储。
在此文件夹中,设置适用于任何崩溃的应用程序。如果要匹配特定进程,请使用进程名称创建一个子文件夹,例如myapphasabug.exe
并在那里应用自定义设置,这会覆盖默认设置。
也许这超出了您的需要,但是codeproject minidumper example如果您希望您的应用程序自动执行“有转储,请将其发送给支持”过程,那么这是向应用程序添加“自转储”/支持代码的非常有用的起点。
另外,请考虑打开 application verifier对于更严格的测试 - 就像驱动程序验证程序一样,它可以在发货之前发现问题,并且非常方便。
关于windows - 自动生成转储文件,是否有注册表设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25283082/