2

ネイティブc++(XYZ.dllなど)から作成されたDLLがあります。C++.NETであるラッパーでそのDLLに対してリンクします。このラッパーのオブジェクトは、私の最高レベルのC#コードで使用されています。

私の質問は次のとおりです。DLLの関数がクラッシュし、最高レベルのC#コードがAppCrashでクラッシュすることがあります。クラッシュモジュール:XYZ.dll。ネイティブC++コードがクラッシュしている場所を特定しようとしていますが、それは無益であることが証明されています。C#コードでこのクラッシュをキャッチして先に進む方法があるかどうか疑問に思いました。

4

3 に答える 3

1

これがあなたが探している答えではないと思いますが、少なくとも問題のトラブルシューティングには役立ちます。AppDomain.UnhandledExceptionを確認してください...スタックトレースをキャッチしてログに記録できるはずです。

于 2013-02-08T00:59:21.363 に答える
0

このクラッシュを確実に「キャッチ」できます。

C++ .NET ラッパー/ハンドラーで、すべての呼び出しをサード パーティの DLL にラップし、すべての呼び出しを C++ の try/catch ブロックでラップします。それはおそらくうまくいくはずです。

そうでない場合は、Windows の構造化例外処理の使用に切り替えます。これにより、ネイティブの Win32 例外がキャッチされ、kill-them-dead が実行されます。これに関する Win32 ドキュメントはこちらにあります

于 2013-02-08T02:23:44.660 に答える
0

これは、Visual Studio でデバッグしているものですか? そうでない場合は、Windows デバッガーをインストールして、cdb.exe でアプリを実行することを検討してください。アンマネージド コンポーネントのシンボル (.pdb) があることを確認してください。デバッガー (Visual Studio または cdb/windbg) でアプリを実行し、クラッシュを再現できる場合は、スタック トレースを取得できるはずです。また、管理されていないライブラリを所有しているとほのめかしているので、ソースを持っていると仮定できますか? VS を使用している場合は、[Debug Just My Code] 設定を必ず無効にしてください。Windbg を使用している場合、最初のチャンス例外に遭遇すると、クラッシュのポイントにスタック トレースが表示されるはずです。

于 2013-02-08T02:07:04.027 に答える