我正试图在生产机器上调试我的应用程序。它大约每两天崩溃一次,我不知道为什么。
几天来,我一直在努力让生产机器在程序崩溃时产生完全的崩溃转储。有时它会这样做,但有时,它不会生成完整的崩溃转储,而是创建简短的文本文件,简单地列出加载的所有模块,并表示程序崩溃。这些短文件保存在%LOCALAPPDATA%\Microsoft\Windows错误报告\ReportArchive中。
就我的一生而言,我无法理解为什么会发生这种事!我不能要求这些用户运行adplus或windbg或类似的东西。我只需要在每次程序崩溃时创建一个崩溃转储。
有人能帮忙吗?我正在附加WER的完整注册表设置。它们既存在于HKEY_LOCAL_MACHINE\Software\Wow6432Node上,也存在于64位节点上。如您所见,LocalDumps关键点指向C:\ProgramData\Microsoft\Windows\WER\LocalDumpss以保存崩溃转储,是的,每个人都对此文件夹拥有完全权限。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows 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_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingBrokerUp]
"WWAJSE"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingConsent]
"SQLException64"=dword:00000004
"SQLException"=dword:00000004
"DefaultConsent"=dword:00000004
"DefaultOverrideBehavior"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingDebug]
"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_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingHeapControlledList]
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingHeapControlledListdwm.exe]
"EnableHeapThrottle"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingLocalDumps]
"DumpFolder"="C:\ProgramData\Microsoft\Windows\WER\LocalDumps"
"DumpCount"=dword:0000000a
"DumpType"=dword:00000002
"CustomDumpFlags"=dword:00000000
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingRuntimeExceptionHelperModules]
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll"=dword:00000000
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingWMR]
"Disable"=dword:00000001
移动您添加到的值
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsWindows Error ReportingLocalDumps]
至
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumpsProgramName.exe]
例如:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumpsSnagit32.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
您已经在32位版本的HKLM的Windows错误报告项中设置了"DontShowUI"=dword:000000001(如图所示),但这将被HKCU中的值覆盖,例如:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsWindows Error Reporting]
<other entries not shown>
"DontShowUI"=dword:00000000
请确保您没有通过调用来禁用进程的WER
设置错误模式(SEM_NOGPFAULTERRORBOX);
SEM_NOGPFAULTERRORBOX设置将阻止Windows错误报告处理崩溃,因此如果调用SetErrorMode,请省略此标志。
如果注册表或SetErrorMode未禁用WER,则Windows错误报告将尊重LocalDumps键。将DontShowUI设置为1将防止出现崩溃对话框,但如果启用了WER,则不会阻止创建LocalDumps。
我的两美分(即使是旧的..但可能有用)在windows7和win10 64位环境下测试。它确实有效。
提示:密钥以十六进制保存,但您也可以简单地使用:(保存在*.REG文件中)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps]
"DumpCount"=dword:0000000a
"DumpType"=dword:00000002
"DumpFolder"="c:\CrashDumps"