4

我的应用程序在一段时间后崩溃,但我找不到任何模式。我能够得到崩溃转储。应用程序在 Windows Mobile 6.5 上运行。它是用 C# 编写的。它使用Imaging API、PInvoks 和大量线程。

当我使用 Visual Studio 2008 调试该转储时,在输出中显示“xxx.exe 中 0x782260ec 处的第一次机会异常:0xC0000005:访问冲突”

调用堆栈显示 2 个条目。但我无法匹配其中任何一个来从我的代码中调用。

windbg.exe 表示此错误出现在“netcfagl3_5.dll”中

是否有一些特殊的技术可以分析 Windows Mobile 中的转储文件?

4

3 回答 3

1

0xC0000005: Access violation意味着您的 p/invokes 之一不正确。该调用试图写入它无权访问的内存区域(如果定义不正确,这是典型的)。

您的转储也应该包含堆栈跟踪?

于 2011-11-08T15:26:55.717 回答
1

“第一次机会异常”通常是指已由用户代码处理的异常。如果您使用 Vosual Studio 和 Windows Mobile 模拟器进行调试,那么您可以关闭异常处理。转到调试 > 异常并检查 Win32 异常的“抛出”列。然后运行程序并尝试让它再次跌倒。

当调试运行时,它将停止执行并在遇到“第一次机会异常”时中断调试器,让您查看导致该异常的原因,并查看它是否以任何方式相关。

“netcfagl3_5.dll”库是 .NET CF 的一部分,而不是您的代码,这就是您无法匹配调试符号的原因。

于 2011-11-08T15:22:58.487 回答
0

您需要下载 windbg,Visual Studio 2008 不会进行 Post Mortem .NET 调试。

如果您的开发机器是 64 位的,请参阅“如何使用 Windbg 调试在 x64 机器上运行的 32 位 .NET 应用程序的转储

否则,请参阅Windows Mobile 下的 Post Mortem Debug with WinDbg。还在“Windows Mobile Post Mortem Debug”上进行一些搜索。

不过,最好(到目前为止)和最简单的方法是在调试器上运行时重现此问题。事后 .net 调试并不容易。

-保罗H

于 2011-11-08T15:46:12.690 回答