2011-11-08 105 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

相關問題