我们有一个针对.NET 4.0编写的应用程序,它在周末崩溃,将以下消息放入事件日志中:
应用程序:PnrRetrieverService.exe Framework版本:v4.0.30319
描述:由于.NET运行时在IP 791F9AAA(79140000)处出现内部错误而导致进程终止,退出代码为80131506.
这是在Windows Server 2003 R2标准版框中.谷歌搜索这个错误没有发现任何相关的.例如,这不是在VS Studio中发生的,而是在生产框中发生; 当服务最终重新启动时,它没有遇到任何进一步的问题.
如何诊断.NET运行时中的错误?
我正在调试GC堆损坏,并且我想尝试在WinDbg + PageHeap + AppVerifier + GCStress下运行程序.
我在文章软件崩溃中找到了:故障模块mscorwks.dll,版本1.1.4322.2379我可以像这样启用GCStress:
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v HeapVerify /t REG_DWORD /d 1
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v StressLog /t REG_DWORD /d 1
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v GCStress /t REG_DWORD /d 3
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v FastGcStress /t REG_DWORD /d 2
Run Code Online (Sandbox Code Playgroud)
(我正在尝试这种方法.它会永远启动程序.我从注册表中删除了最后两个条目以使其工作,可能是方法本身出了问题.)
或者gc_heap :: garbage_collect中没有非托管模块的.NET 4 Runtime中的文章访问冲突描述了另一种方法:
(DWORD) StressLog = 1
(DWORD) LogFacility = 0xffffffff
(DWORD) StressLogSize = 65536
Run Code Online (Sandbox Code Playgroud)
哪种方式是正确的还是有另一种正确的方法?