0

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

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

另外 - 我发现了如何在 VS2008 中启用调试异常(Debug->Exceptions->checked all 5 category of exceptions)。它仍然给了我完全相同的结果——崩溃而无法查看调试器中发生了什么。

“PS.exe”(托管):已加载“C:\Windows\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll”类型“System.Deployment.Application.InvalidDeploymentException”的第一次机会异常发生在 System.Deployment.dll 在 mscorlib.dll 中发生“System.Threading.ThreadAbortException”类型的第一次机会异常线程 0x1964 已退出,代码为 0 (0x0)。线程 0x1b24 以代码 0 (0x0) 退出。mscorlib.dll 中出现“System.ArgumentOutOfRangeException”类型的第一次机会异常 mscorlib.dll 中出现“System.ArgumentOutOfRangeException”类型的第一次机会异常 mscorlib 中出现“System.ArgumentOutOfRangeException”类型的第一次机会异常。发生在 mscorlib.dll 线程 0x19b8 已退出,代码为 0 (0x0)。线程 0x18f4 以代码 0 (0x0) 退出。线程 0x420 以代码 0 (0x0) 退出。mscorlib.dll 中发生“System.ArgumentOutOfRangeException”类型的第一次机会异常 mscorlib.dll 中发生“System.ArgumentOutOfRangeException”类型的第一次机会异常 mscorlib.dll 中发生“System.ArgumentOutOfRangeException”类型的第一次机会异常 A first mscorlib.dll 中发生“System.ArgumentOutOfRangeException”类型的机会异常 mscorlib.dll 中发生“System.ArgumentOutOfRangeException”类型的第一次机会异常 mscorlib 中发生“System.ArgumentOutOfRangeException”类型的第一次机会异常。

4

5 回答 5

3

这有点像在一级方程式比赛中目睹那些大规模的堆积。最后一点静止的弹片报告说:

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

是的,这是一个非常严重的爆胎。当堆损坏时,很多事情都会出错。您可能有一些非托管代码以非托管代码的典型方式行为不端,通过错误的指针写入破坏了堆的完整性。很难诊断,隔离该代码。

于 2010-09-08T17:44:10.607 回答
1

在 VS 中,转到 Debug / Exceptions,然后激活“Thrown”下的“Common language runtime exceptions”复选框。这将捕获“第一次机会异常”。

部署异常似乎与单击一次有关。你在用吗?

于 2010-09-08T17:34:57.677 回答
0

如果开发工具使您失败,请创建输出日志文件或使用消息框对其进行跟踪。

于 2010-09-08T17:35:12.600 回答
0

在 Visual Studio 中按Ctrl+ Alt+E或从菜单中选择“调试”>“异常”,然后单击“CLR 异常”以捕获所有第一次机会异常。那么这应该有望在争论点打破。

否则,请尝试在代码中的关键点编写Debug.WriteTrace.Write声明,以查看在失败发生之前您达到的点。Debug 和 Write 都可以在System.Diagnostics命名空间中找到。

于 2010-09-08T17:36:18.643 回答
0

IMO 调试堆损坏的最佳方法是使用 Windbg。这是 Tess 关于调试托管堆损坏的博客文章

高温高压

于 2010-09-08T18:48:00.960 回答