これをデバッグする方法についてはわかりません。私はC#プログラムを.NET 4.5で動作するマネージドコードだけで構成しています。一見無作為な時間にそれをしばらく実行した後、エラー "mscorlib.dllで 'System.AccessViolationException'型の未処理の例外が発生しました。私は、Visual Studio(2012)からそれを実行していますので、私は「休憩」をクリックし、次のコールスタックを提示しています:私のコードではないアクセス違反
mscorlib.dll!System.Threading._IOCompletionCallback.PerformIOCompletionCallback(uint errorCode, uint numBytes, System.Threading.NativeOverlapped* pOVERLAP) + 0x47 bytes
[Native to Managed Transition]
[email protected]() + 0xc bytes
[email protected]() + 0x4f bytes
[email protected]() + 0x2b bytes
[email protected]() + 0xf bytes
[email protected]() + 0x22 bytes
mdnsNSP.dll!7177aa48()
[Frames below may be incorrect and/or missing, no symbols loaded for mdnsNSP.dll]
mdnsNSP.dll!71775b06()
mdnsNSP.dll!71774ded()
mdnsNSP.dll!71774e8c()
bcryptprimitives.dll!746d1159()
bcryptprimitives.dll!746d1137()
[email protected]() + 0x14 bytes
[email protected]() + 0xc bytes
[email protected]() + 0xc bytes
[email protected]() + 0x1a bytes
私が気づく興味深いのは、コールスタック内の何も私のコードではないということです。
私は問題のルートを見つけるためにどのような戦略を使用することをお勧めしますか?またはこれに類似した問題を見て、ヒントをお持ちですか?
例外には自分のコードが含まれていないようですので、質問に答えるのに役立つ情報はわかりませんが、私に含めるべきことが他にあるかどうか尋ねます。
(PerformIOCompletionCallbackがスタックの一番上にあるため)エラーがIO関連するかもしれないので、これは、このアプリケーションが実行する典型的なIOタスクのリストである:
- TcpListener.AcceptTcpClientAsync
- NetworkStream。書き込み/ BeginRead/EndRead
- SqlCommand.BeginExecuteReader/EndExecuteReader
- StreamWriter.WriteLine
その他の注意事項:
- 大体再現可能であるように思わ - 私は同じ場所(PerformIOCompletionCallback)で同じエラーを取得しますが、(数分のために)それを得るために、時間の異なる長さを待たなければなりません。
- 問題を確実に強調する小さなプログラムを製造することはできません。私のプログラムは、このエラーを起こす前に何千もの同様のIO操作を処理します。 は
編集:
Mdnsnsp.dllはボンジュールからのものであることを@Kevinの提案に基づいて、私はBonjourのをアンインストールして、再度試してみました。例外は解消されないが、コールスタックは非常にきれいです。
mscorlib.dll!System.Threading._IOCompletionCallback.PerformIOCompletionCallback(uint errorCode, uint numBytes, System.Threading.NativeOverlapped* pOVERLAP) + 0x47 bytes
[Native to Managed Transition]
[email protected]@12() + 0x12 bytes
[email protected]() + 0x27 bytes
[email protected]() + 0x1b bytes
私は、ネットワークトラフィックのためのいくつかの良性のフックDLLをインストールBonjourのインストーラを想定し、それは問題を解決しませんでしたアンインストールしています。
編集:
私は容疑者としてこれを排除するために、より遅い「安全な」同等物を使用して、一時的に再コード化されたすべての私unsafe
の機能を持っています。現在、アプリケーションのアセンブリは、安全でないスイッチを使用してコンパイルされていません。問題は依然として続きます。これを繰り返すと、このアプリケーションでは安全でないコード、ネイティブコード、P/Invoke呼び出し(ユーザーコード内)はありませんが、上記のようにAccessViolationException
がまだ発生しています。
boot.iniに/ 3GBスイッチが有効になっていますか?私はこのような奇妙なエラーが私が取り組んだシステムで覚えていることを覚えている。私は、使用可能なメモリが減っているため、I/Oを処理するリソースが不足しているという結論に達しました。 –
'安全でない'コードやP/Invokeを使用していますか? |このようなエラーは、ネイティブコードが依然として必要とするバッファを移動させるGCに適合します。 – CodesInChaos
マネージコードが呼び出しているアンマネージコードによって例外がスローされることがあります。 [管理されていないコードのデバッグを有効にする](http://msdn.microsoft.com/en-us/library/vstudio/tdw0c6sf%28v=vs.100%29.aspx)を解凍し、プログラムのデバッグを試みます。 – keyboardP