私のアプリケーションはC#とC++のコードが混在しています。 C#で記述された起動モジュールは、COM(Component Object Model)メカニズムを介して初期化フェーズC++モジュールの間に読み込まれます。私はC#の部分にwcfサービスを追加することに決めたまで、すべてが正しく機能していました。すべてのwcfサービス呼び出しは、COMを使用してC++コードにルーティングされます。いくつかの新しいメソッドを追加した後、私は出力ウィンドウでメモリリークに気付きました。そこで、スクリーンショットからわかるように、C++クラスのデスクトラクタにブレークポイントを追加しました。この時点から奇妙なことが起こり始めました。プログラムがブレークポイントに達した後、予期せずクラッシュします。最初の奇妙なことは、ブレークポイントを設定せずにプログラムを実行すると、優雅に終了するということです。 2つ目の奇妙なことは、デバッガなしで実行しているかのようにプログラムがクラッシュするということです。 「Open in debugger」(またはこのようなもの)のボタンをクリックした後、「プログラムは既にデバッガの下で開かれています」というエラーメッセージが表示されます。エラーの原因を指摘する可能性のあるメッセージは出力ウィンドウに表示され、疑わしいコードはありません。 メッセージボックスをデストラクタに追加すると、メッセージボックスに表示されている内容を読む機会をユーザに追加することなく、アプリケーションのクローズが数秒で表示されます。必死に何か手掛かりを探す。COMオブジェクトデストラクタをデバッグするときに奇妙なクラッシュが発生する
P.S.問題は、wcfメソッドが少なくとも1回呼び出されたときにのみ発生します。この特定の呼び出しのプログラムフローがC++レベルにルーティングされたかどうかに依存しません。 C++からのC#を呼び出す場合、時にはガベージコレクタが正しくプログラム終了前に呼び出されません
VSデバッガの代わりにWinDbgを使用して、クラッシュに関する詳細情報を取得してください – SpaceghostAli