1

我正在尝试在生产机器上调试我的应用程序。它大约每 2 天崩溃一次,我不知道为什么。

几天来,我一直在尝试让生产机器在程序崩溃时产生完整的崩溃转储。有时确实如此,但有时,它不会生成完整的故障转储,而是创建简短的文本文件,其中仅列出所有已加载的模块并说明程序已崩溃。这些短文件保存在 %LOCALAPPDATA%\Microsoft\Windows Error Reporting\ReportArchive 中。

对于我的一生,我无法理解为什么会这样!我不能要求这些用户运行 adplus 或 windbg 或类似的东西。每次程序崩溃时,我只需要创建一个崩溃转储。

有人可以帮忙吗?我附上了 WER 的完整注册表设置。这些存在于 HKEY_LOCAL_MACHINE\Software\Wow6432Node 和 64 位节点上。如您所见,LocalDumps 键指向 C:\ProgramData\Microsoft\Windows\WER\LocalDumps 以保存故障转储,是的,每个人都拥有此文件夹的完全权限。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting]
"ErrorPort"="\\WindowsErrorReportingServicePort"
"MaxQueueSizePercentage"=dword:00000001
"PurgeThreshholdValueInKB"=dword:0000000a
"Disabled"=dword:00000000
"MaxQueueCount"=dword:00000032
"DisableQueue"=dword:00000000
"LoggingDisabled"=dword:00000000
"DontSendAdditionalData"=dword:00000000
"AutoApproveOSDumps"=dword:00000001
"MaxQueueSize"=dword:00000400
"ForceQueue"=dword:00000001
"DontShowUI"=dword:00000001
"ConfigureArchive"=dword:00000002
"MaxArchiveCount"=dword:000001f4
"DisableArchive"=dword:00000000
"LastQueuePesterTime"=hex(b):57,18,42,be,ba,81,d0,01
"LastLiveReportFlushTime"=hex(b):87,cf,56,3d,bc,81,d0,01
"LastQueueNoPesterTime"=hex(b):4d,39,bb,3a,51,97,d0,01
"LastRateLimitedDumpGenerationTime"=hex(b):87,84,74,9b,90,85,d0,01

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\BrokerUp]
"WWAJSE"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\Consent]
"SQLException64"=dword:00000004
"SQLException"=dword:00000004
"DefaultConsent"=dword:00000004
"DefaultOverrideBehavior"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\Debug]
"ExceptionRecord"=hex:de,fa,ed,0e,01,00,00,00,00,00,00,00,98,45,4d,75,07,00,00,\
  00,81,f8,46,00,dc,37,49,00,88,37,49,00,00,00,00,00,c0,fe,18,00,fc,fe,18,00,\
  1c,f9,18,00,02,00,00,00,04,f9,18,00,00,00,00,00,0c,f9,18,00,96,27,40,00,da,\
  3b,40,00,f0,0c,45,00,e2,31,40,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\HeapControlledList]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\HeapControlledList\dwm.exe]
"EnableHeapThrottle"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="C:\\ProgramData\\Microsoft\\Windows\\WER\\LocalDumps"
"DumpCount"=dword:0000000a
"DumpType"=dword:00000002
"CustomDumpFlags"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\RuntimeExceptionHelperModules]
"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscordacwks.dll"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\WMR]
"Disable"=dword:00000001
4

2 回答 2

2

移动您添加的值

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ProgramName.exe]

例如:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\Snagit32.exe]
"CustomDumpFlags"=dword:00000000
"DumpCount"=dword:00000003
"DumpFolder"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,\
  00,41,00,54,00,41,00,25,00,5c,00,54,00,65,00,63,00,68,00,53,00,6d,00,69,00,\
  74,00,68,00,5c,00,53,00,6e,00,61,00,67,00,69,00,74,00,5c,00,43,00,72,00,61,\
  00,73,00,68,00,44,00,75,00,6d,00,70,00,73,00,00,00
"DumpType"=dword:00000002

您在 HKLM 的 Windows 错误报告键的 32 位版本中设置了“DontShowUI”=dword:00000001(如图所示),但这将被 HKCU 中的值覆盖,例如:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting]
<other entries not shown>
"DontShowUI"=dword:00000000

确保您没有通过调用为您的进程禁用 WER

设置错误模式(SEM_NOGPFAULTERRORBOX);

SEM_NOGPFAULTERRORBOX 设置将阻止 Windows 错误报告处理崩溃,因此如果您调用 SetErrorMode,请忽略此标志。

如果注册表或 SetErrorMode 未禁用 WER,Windows 错误报告将遵循 LocalDumps 键。将 DontShowUI 设置为 1 将阻止出现崩溃对话框,但如果启用 WER,则不会阻止创建 LocalDumps。

于 2015-09-20T12:15:15.503 回答
0

我的两分钱(即使旧.. 但也许有用) 在 windows7 和 win10 64 位下测试。它确实有效。

提示:密钥以十六进制保存,但您也可以简单地使用:(保存在 *.REG 文件中)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpCount"=dword:0000000a
"DumpType"=dword:00000002
"DumpFolder"="c:\\CrashDumps"
于 2018-08-23T09:22:30.203 回答