1

c#.net プロジェクトにマネージド c++ dll を追加しました (「リソースの追加」を使用)。インスタンス化しようとしているクラスは問題なく検出され、コンパイラ エラーは発生しません。しかし、どういうわけか、私がインスタンス化したことがわかっているフィールドは、null 参照例外を取得しています。そのため、フィールドを設定するメソッドの先頭にブレークポイントを配置しました...そして決してヒットしません。.dll のクラスを使用して行をコメント アウトすると、ブレークポイントにヒットします。そのコメントを外すと、メソッドが呼び出されても実行されません。ここで何が起こっているのですか?

dll は ManagedSpyLib で、クラスはControlProxyです。呼び出しは、バックグラウンド ワーカーの DoWork メソッド内で行われます。これは、非同期的に開始されることが最も確実です。スレッド全体が、デバッガーに警告することもなく、静かにクラッシュする可能性はありますか? どうすればこれをデバッグできますか?

ETA: 出力ウィンドウまたはモジュール ウィンドウで dll に関する情報が見つかりませんでした。いくつかのグーグルで修正が見つかりました。ターゲットを.net 3.5フレームワークに変更してください。しかし、私は WTF が進行していることを以前よりも理解できていません。私のコードは機能しますが、今ではその理由がわかりません。これはさらに不可解です。誰かがこの現象を説明できますか?

4

1 に答える 1

3

不明なエラー/ブレークポイントでの停止の失敗をデバッグするための一般的な手順:

問題の DLL 用にロードされた PDB があることを確認してください ([デバッグ] -> [ウィンドウ] -> [モジュール])。ソースが使用しているバージョンと一致していることを確認してください。

デバッグ中に、出力ウィンドウに疑わしいトレース (特に例外に関する) がないかどうかを確認します。

すべての例外で中断することを検討してください (CLR 例外の場合、[デバッグ] -> [例外] -> [スローされたとき])。すべての例外で中断するには、「マイ コードのみ」([ツール] -> [オプション] -> [デバッグ] -> [マイ コードのみ]) を無効にする必要がある場合があります。

于 2012-07-30T18:34:57.163 に答える