2009-07-01 87 views
6

ネイティブコードから非確定的なSystem.AccessViolationExceptionがスローされています。それを再現するのは難しいですが、時にはそれが起こります。私はアクセス違反に必要な時間が約2時間であり、アクセス違反が起こるという保証はないので、私が「ただデバッグする」ことができるかどうかは分かりません。System.AccessViolationExceptionの理由を特定する

ネイティブライブラリは、マネージラッパーによって使用されます。 JavaからJNIまで使用され、.NETからIKVMのJNIまで使用されています。問題はIKVMのコードからのみ再現されましたが、データセットが異なり、IKVMのアプリケーションで使用されるデータでJavaアプリケーションをテストする方法がありません。

私はすべての情報源を持っていますが、可能であれば、私は多くの変更を避けたいと考えています。

ネイティブコールスタックは、このアクセス違反の理由について十分な情報を提供すると考えています。

このアクセス違反の理由を特定する有効な方法はありますか?

私にとって理想的な解決策は、コードやプロセス環境の変更であると思うので、このアクセス違反の場合にメモリダンプがクラッシュするので、変更を加えてただ待ってください。

答えて

2

例外が発生するのを待つ余裕がある場合は、マネージデバッガとネイティブデバッガを接続し(混在デバッギングセッション)、AccessViolationExceptionがスローされたときに、管理デバッガをブレークに設定します。管理されたデバッガは、未処理の例外を検出したときにプロセスを中断し、ネイティブのコールスタックを確認することができます。

+0

私は自分のネイティブコードを変更してアクセス違反があり、デバッグシンボルで再コンパイルするようにしました。私はプロセスを正常に開始し、Visual Studioデバッガをアタッチしました。私はAccessViolationExceptionをスローするためのブレークポイントを追加しましたが、キャッチされませんでした。助言がありますか? – okutane

+1

OK、私はブレークポイントがWin32アクセス違反であることがわかりました。 – okutane

関連する問題