在C#中我可以在抛出异常时执行代码吗?

时间:2012-09-07 23:38:09

标签: c# winapi crash-reports crash-dumps

我有一个很难跟踪的错误。它是仅在调试器未连接时才出现的那种之一:)

我已经调整了MiniDumpWriteDump(),这对于创建我可以在事后调试的.dmp文件非常有效。

然而,我正在做类似

的事情
try
{
    foo();
}
catch(Exception)
{
    CreateMiniDump()
}

这很好用,但是我没有得到所需的callstack。我真的更喜欢在抛出异常的地方使用callstack(包含所有成员变量)。

这可能吗?是否有一种机制可以获得异常的第一个dib?这样我可以创建一个minidump并保留callstack等?

2 个答案:

答案 0 :(得分:2)

您可以订阅AppDomain.CurrentDomain.UnhandledException以获取异常即将展开时引发的事件。当它被引发时,原始上下文仍在堆栈中。您可以将您的minidump创建代码放在事件处理程序中。

答案 1 :(得分:2)

在.NET 4及更高版本中,您可以订阅FirstChanceException事件。