崩溃没有被MS VS Debugger困住 - 如何捕获?

时间:2010-09-08 17:29:55

标签: c# .net visual-studio-2008 debugging first-chance-exception

我从我的c#app(Windows 7 / VS2008)中随机崩溃,并没有给我一个通常的堆栈跟踪,而是建议关闭/调试/查找信息窗口7种对话框。我在VS2008下运行应用程序或独立运行 - 同样的事情。单击“Debug”建议使用VS的新实例进行调试,该实例失败,因为“另一个调试器已经附加到应用程序”。但是附加的调试器没有给我任何机会看到它失败的地方,只是在输出窗口中给出一些线索(下面)。怎么处理这个?

看起来我必须在VS调试器中启用(?)第一次机会异常,但目前还不清楚如何...我很感激任何帮助!

添加 - 我发现如何在VS2008中启用调试异常(Debug-> Exceptions->检查了所有5类异常)。它仍然给我完全相同的结果 - 崩溃而无法查看调试器中发生了什么。

  

'PS.exe'(已管理):已加载   'C:\ WINDOWS \装配\ GAC_MSIL \ System.Deployment \ 2.0.0.0__b03f5f7f11d50a3a \ System.Deployment.dll'   类型的第一次机会异常   'System.Deployment.Application.InvalidDeploymentException'   发生在System.Deployment.dll A中   第一次机会异常的类型   'System.Threading.ThreadAbortException'   发生在mscorlib.dll中的线程   0x1964已退出,代码为0(0x0)。   线程0x1b24已退出代码   0(0x0)。第一次机会例外   类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.Threading.ThreadAbortException'   发生在mscorlib.dll中的线程   0x19b8已退出代码0(0x0)。   线程0x18f4已退出代码   0(0x0)。线程0x420已退出   代码为0(0x0)。第一次机会   类型例外   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   首先发生在mscorlib.dll中   机会异常的类型   'System.ArgumentOutOfRangeException'   发生在mscorlib.dll程序中   '[6084] PS.exe:Managed'已经退出   代码为-1073740940(0xc0000374)。

5 个答案:

答案 0 :(得分:2)

有点像在一级方程式比赛中目睹其中一次大规模的堆积。报告的最后一部分弹片报道:

// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION           ((NTSTATUS)0xC0000374L)

是的,这是一个非常严重的轮胎爆胎。堆损坏时会出现很多问题。您可能得到了一些非托管代码,这些代码在非托管代码的典型情况下行为不端,使用错误的指针写入破坏了堆的完整性。很难诊断,隔离该代码。

答案 1 :(得分:1)

在VS中,转到Debug / Exceptions,并激活“Thrown”下的“公共语言运行时异常”复选框。这将抓住“第一次机会异常”。

部署异常似乎与Click Once有关。你在用吗?

答案 2 :(得分:0)

创建输出日志文件或使用消息框来跟踪它,如果开发工具失败了。

答案 3 :(得分:0)

在Visual Studio中按Ctrl + Alt + E或选择调试>从菜单中选择例外,然后单击CLR Exceptions以捕获所有第一次机会异常。那应该有希望在竞争点上突破。

否则,请尝试在代码中的关键点处编写Debug.WriteTrace.Write语句,以了解在发生故障之前您到达的位置。 Debug和Write都可以在System.Diagnostics命名空间中找到。

答案 4 :(得分:0)

IMO最好调试堆损坏是使用Windbg。以下是Tess关于调试托管堆损坏的博客post

HTH