4

混合モードのC++dllを呼び出すC#アプリケーションがあります。HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Windows Error Reporting\LocalDumpsを介してダンプ生成を有効にしました。

dllが無効なメモリにアクセスすると、ランタイムはwin32例外をマネージドSystem.AccessViolationExceptionに変換し、ダンプを生成する前にスタックを巻き戻し、ネイティブスタック情報を破棄します。msdnによると、.netが例外を取得して手動でダンプを生成する前に自分で例外をキャッチすることはできますが、すでに破損しているプログラムでコードを実行すると、例外がハングする可能性があります。では、どうすればSEH変換を無効にできますか?

4

1 に答える 1

1

それを無効にすることはできません。例外をキャッチしない限り、CLR はスタックをアンワインドしません。そうしないようにしてください。これは、AppDomain.UnhandledException イベント ハンドラーを通過する必要があります。必要な必須関数は Marshal.GetExceptionPointers() です。これは、ミニダンプを開いたときに例外を特定する関数です。

この MSDN フォーラム スレッドの私の回答と、この pinvoke.net snippetにリソースがあります。

于 2013-03-19T22:52:51.543 に答える