我正在尝试使用 DebugDiag 创建一个转储,该转储将包含未处理的 .NET 异常的信息。
转储文件的创建似乎依赖于运行代码,我不明白为什么。
这些是我采取的步骤:
DebugDiagTest
准备一个使用以下代码命名的简单控制台应用程序,它会引发InvalidOperationException
异常:using System; namespace DebugDiagTest { class Program { static void Main(string[] args) { if (ShouldAwaitKeyPress(args)) Console.ReadLine(); Throw(); } static void Throw() { throw new InvalidOperationException(); } static bool ShouldAwaitKeyPress(string[] args) { var shouldAwaitKeyPress = false; if (args.Length > 0) { bool.TryParse(args[0], out shouldAwaitKeyPress); } return shouldAwaitKeyPress; } } }
用编译和运行
DebugDiagTest.exe true
,还不要按任何键;让它等待按键(步骤 4)。准备一个DebugDiag异常规则(可以按照这篇文章)。
回到 running
DebugDiagTest.exe
,然后按一些键使其崩溃。转到
C:\Program Files\DebugDiag\Logs\Crash rule for all instances of DebugDiagTest.exe
,您将看到一个.dmp
文件。现在运行
DebugDiagTest.exe false
,再次转到C:\Program Files\DebugDiag\Logs\Crash rule for all instances of DebugDiagTest.exe
,您会看到没有创建任何.dmp
文件。
您现在可以随时重新运行DebugDiagTest.exe true
,并且每次都会创建转储文件。但是,重新运行DebugDiagTest.exe false
永远不会创建转储文件。
我的问题:
为什么运行DebugDiagTest.exe true
会创建转储,而DebugDiagTest.exe false
不会?