1

プロジェクトでFluorineFx 1.0.0.17を使用しNetConnectionており、RTMP ホスト (Flash Media Server) に接続するために使用しています。PRTG 用の RTMP 監視プローブを作成しています。

ファイルの 173 行目のメイン アプリケーション プロセスの最後に常にエラーがありWorkItemsQueue.csます (ここに示す 2 番目のコード行)。

// Prepare array of wait handle for the WaitHandle.WaitAny()
WaitHandle [] waitHandles = new WaitHandle [] { WaitEntry.WaitHandle, cancelEvent };

// Wait for available resource, cancel event, or timeout.
int index = WaitHandle.WaitAny(waitHandles, millisecondsTimeout, true);

これはデバッガーが私に示すものです:

ここに画像の説明を入力

コール スタック:

[In a sleep, wait, or join] 
[External Code] 
FluorineFx.dll!FluorineFx.Threading.WorkItemsQueue.DequeueWorkItem(int millisecondsTimeout, System.Threading.WaitHandle cancelEvent) Line 173 + 0xd bytes   C#
FluorineFx.dll!FluorineFx.Threading.ThreadPoolEx.Dequeue() Line 329 + 0x2c bytes    C#
FluorineFx.dll!FluorineFx.Threading.ThreadPoolEx.ProcessQueuedItems() Line 378 + 0x8 bytes  C#
[External Code] 
kernel32.dll!749c3677()     
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  
ntdll.dll!770e9f42()    
ntdll.dll!770e9f15()    

プロセスの最後とは、プログラム全体が正常に動作することを意味しますが、メイン メソッド デバッガーの最後にこのアンマネージ コード エラーがスローされます (アンマネージ コードのデバッグを有効にするが有効な場合にのみ表示されます)

ここに画像の説明を入力

これをデバッグする方法も、回避する方法もわかりません。どんな助けでも大歓迎です。

更新 1:

ここに画像の説明を入力

メイン スレッドは次の場所で停止します。

 Environment.Exit(0);
4

1 に答える 1

2

マルチスレッド デバッグの場合、Visual Studio が嘘をつく可能性があります。を にすることはできませwaitHandlesnull

ヒープが破損しているようです。

詳細

プロセスがメモリ空間内にないメモリ位置にアクセスしようとすると、アクセス違反が発生します。これは、バッファ オーバーランで発生します。名前を付けます。アンマネージ コードを使用している場合は、これで簡単に実行できます。

于 2012-03-20T12:54:20.190 に答える