.Net 进程的自动故障转储
Automatic Crash Dump for .Net process
我正在尝试设置一个 Windows Server 2016 实例,以便在 .Net 进程因未处理的异常退出时自动创建故障转储。我尝试了以下方法:
Windows 错误报告(如此处所述:https://docs.microsoft.com/en-us/windows/win32/wer/wer-settings)[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 错误 Reporting\LocalDumps\MyApplication.exe]
"DumpType"=双字:00000002
"DumpCount"=双字:00000005
"DumpFolder"="C:\dumps"
WinDbg 作为事后调试器(windbg -I,如此处所述:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-postmortem-debugging)
procdump 作为事后调试器(procdump -ma -i C:\dumps,如上 link 所述)
我已经尝试 运行 我的应用程序会生成异常。我所要做的就是在相同的配置中启动它两次,第二个实例因套接字绑定异常而崩溃。但是,在上述 none 个案例中,崩溃会生成转储文件。我是否需要在 Windows Server 2016 上做一些特别的事情,或者我需要对我的 .Net 应用程序做一些特别的事情来让它在未处理的异常上触发转储?
我找到了原因:我们正在使用 TopShelf to host our process. By default TopShelf handles uncaught exceptions 并干净地退出。
对于后来的任何人,请注意 TopShelf 从去年年底开始有一个未记录的功能来禁用此行为:
x.UnhandledExceptionPolicy = Topshelf.Runtime.UnhandledExceptionPolicyCode.TakeNoAction;
在服务配置中就可以了。使用此代码,我能够获得故障转储。
我正在尝试设置一个 Windows Server 2016 实例,以便在 .Net 进程因未处理的异常退出时自动创建故障转储。我尝试了以下方法:
Windows 错误报告(如此处所述:https://docs.microsoft.com/en-us/windows/win32/wer/wer-settings)[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 错误 Reporting\LocalDumps\MyApplication.exe] "DumpType"=双字:00000002 "DumpCount"=双字:00000005 "DumpFolder"="C:\dumps"
WinDbg 作为事后调试器(windbg -I,如此处所述:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-postmortem-debugging)
procdump 作为事后调试器(procdump -ma -i C:\dumps,如上 link 所述)
我已经尝试 运行 我的应用程序会生成异常。我所要做的就是在相同的配置中启动它两次,第二个实例因套接字绑定异常而崩溃。但是,在上述 none 个案例中,崩溃会生成转储文件。我是否需要在 Windows Server 2016 上做一些特别的事情,或者我需要对我的 .Net 应用程序做一些特别的事情来让它在未处理的异常上触发转储?
我找到了原因:我们正在使用 TopShelf to host our process. By default TopShelf handles uncaught exceptions 并干净地退出。
对于后来的任何人,请注意 TopShelf 从去年年底开始有一个未记录的功能来禁用此行为:
x.UnhandledExceptionPolicy = Topshelf.Runtime.UnhandledExceptionPolicyCode.TakeNoAction;
在服务配置中就可以了。使用此代码,我能够获得故障转储。