2011-11-08 102 views
4

我的应用程序在一段时间后崩溃,但找不到任何模式。我能够得到我的手在崩溃转储。应用程序在Windows Mobile 6.5上运行。它是用C#编写的。它使用Imaging API,PInvoks和大量的线程。xxx.exe中0x782260ec的第一次机会异常:0xC0000005:访问冲突

当我调试与Visual Studio 2008的转储,在其输出显示为“在xxx.exe第一次机会异常在0x782260ec:0000005:访问冲突”

调用堆栈显示2项。但我无法匹配他们中的任何人从我的代码中调用。

WINDBG.EXE表明,在“netcfagl3_5.dll”

是否有一些特殊的技术来从Windows Mobile的分析转储文件出现此错误?

+0

是否从调试器运行掩盖了问题?如果是这样,它可能是一个竞争条件,从您的描述我会怀疑并行调用到您的本地代码,并不旨在支持并发访问。 – Damon8or

回答

0

'第一次机会异常'通常意味着已由用户代码处理的异常。如果您使用Windows Mobile仿真器的Vosual Studio &进行调试,那么您可以关闭异常处理。转到Debug> Exceptions并检查Win32 Exceptions的'Thrown'列。然后运行程序并尝试让它再次崩溃。

当调试运行时,它会暂停执行,并在调试器遇到“首次机会异常”时允许您查看是什么原因造成的,并查看它是否有任何相关性。

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

+0

访问冲突不是CLR异常。他将不得不赶上Win32 Exceptions。我不认为在做CLR调试时他可以从中获得很多信息。 – PaulH

+0

@PaulH注意和编辑。而且,这样做的真正原因是在执行时抛出一些上下文。允许您查看当前包含的变量/引用对于快速诊断问题至关重要。 –

1

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

你的转储应该也包含一个堆栈跟踪?

0

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

如果你的开发机是64位的,请参阅 “How to use Windbg to debug a dump of a 32bit .NET app running on a x64 machine

否则,请参阅Post Mortem Debug under Windows Mobile with WinDbg。还可以在“Windows Mobile Post Mortem Debug”中进行一些搜索。

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

-PaulH

相关问题