2011-11-08 57 views
4

アプリケーションがしばらくしてクラッシュしましたが、パターンが見つかりません。私はクラッシュダンプに手を差し伸べることができた。アプリケーションはWindows Mobile 6.5で動作します。これはC#で書かれています。それはImaging API、PInvoksとたくさんのスレッドを使用します。xxx.exeの0x782260ecで最初の例外が発生しました。0xC0000005:アクセス違反

私は、Visual Studio 2008でそのダンプをデバッグする場合、出力にそれが表示された「XXX.EXEに0x782260ecでの初回例外が:0xc0000005で:アクセス違反」

コールスタックは、2つのエントリを示しています。しかし私は自分のコードから呼び出すためにそれらのいずれかを一致させることはできません。

WINDBG.EXEは、このエラーは、「netcfagl3_5.dll」で発生していることを示し

は、Windows Mobileからダンプファイルを分析するが、いくつかの特殊な技術である??

+0

デバッガから実行すると問題がマスクされますか?もしそうなら、あなたの記述から、同時アクセスをサポートするように設計されていないあなたのネイティブコードへの同時呼び出しが疑わしい競合状態でしょう。 – Damon8or

答えて

0

「初回例外」は、通常、ユーザーコードによって処理された例外を意味します。 Vosual Studio &を使用してデバッグしている場合は、例外処理をオフにすることができます。 [デバッグ]> [例外]に移動して、[Win32例外]の[スロー]列を確認します。その後、プログラムを実行してみて、もう一度やり直してください。

デバッグが実行されると、実行を中断し、デバッガにブレークします。デバッガがその「ファーストチャンスの例外」に当たったときに何が起こっているのかを確認し、それが何らかの関係にあるかどうかを確認できます。

'netcfagl3_5.dll'ライブラリは、コードではなく.NET CFの一部です。そのため、デバッグシンボルを一致させることができません。

+0

アクセス違反はCLR例外ではありません。彼はWin32の例外を捕まえなければならないだろう。私は、CLRのデバッグをしている間に彼が得ることができる情報はたくさんあるとは思わない。 – PaulH

+0

@PaulHが指摘して編集しました。また、これを行う本当の理由は、実行がスローされる時点でいくつかのコンテキストを取得することです。現在どの変数/参照に含まれているかを見ることができれば、問題をすばやく診断する上で非常に重要です。 –

1

0xC0000005: Access violationは、p/invokeの1つが間違っていることを示します。呼び出しがアクセスできないメモリ領域に書き込もうとしました(定義が正しくない場合は一般的です)。

ダンプにスタックトレースも含める必要がありますか?

0

windbgをダウンロードする必要があります。Visual Studio 2008はPost Mortem .NETのデバッグを行いません。

開発マシンが64ビットである場合は、Post Mortem Debug under Windows Mobile with WinDbgを参照してください、そうでなければ "How to use Windbg to debug a dump of a 32bit .NET app running on a x64 machine"

を参照してください。また、「Windows Mobile Post Mortem Debug」で検索することもできます。

デバッガで実行しているときにこの問題を再現するのが最良です(これまでのところ)、最も簡単な方法です。死後の.netデバッグは簡単ではありません。

-PaulH

関連する問題