1

我正在尝试设置一个 Windows Server 2016 实例,以便在 .Net 进程以未处理的异常退出时自动创建故障转储。我尝试了以下方法:

  • Windows 错误报告(如此处所述:https : //docs.microsoft.com/en-us/windows/win32/wer/wer-settings)[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApplication.exe ] "DumpType"=dword:00000002 "DumpCount"=dword: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,如上述链接中所述。)

我尝试以会产生异常的方式运行我的应用程序。我所要做的就是在相同的配置中启动它两次,然后第二个实例在套接字绑定异常上崩溃。但是,在上述任何情况下,崩溃都不会生成转储文件。我在 Windows Server 2016 上是否需要做一些特别的事情,或者我需要对我的 .Net 应用程序做一些特别的事情以使其触发未处理异常的转储?

4

1 回答 1

1

我找到了原因:我们使用TopShelf来托管我们的流程。默认情况下, TopShelf 处理未捕获的异常并干净地退出。

对于后来的任何人,请注意 TopShelf 从去年年底开始有一个未记录的功能来禁用此行为:

x.UnhandledExceptionPolicy = Topshelf.Runtime.UnhandledExceptionPolicyCode.TakeNoAction;

在服务配置中会这样做。使用此代码,我能够获得故障转储。

于 2019-08-09T16:11:56.293 回答