0

DebugBreak() を配置し、Visual Studio セッションにアタッチすることで、[非常に便利に] DLL をデバッグできます。ただし、その DLL は LoadLibrary() を実行して別の DLL を動的にロードします。DLL は期待どおりに実行されますが、ブレークポイントを正しく設定できないようです。

その 2 番目の DLL に DebugBreak() を配置し、そのプロジェクトを使用してそれにアタッチすると、VS セッションは常に、関数の実行が既に終了したように見えた後、プロセス管理をサポートする Visual C++ ライブラリ内のあるポイントにジャンプします。

(crt0dat.c)

void __cdecl __crtExitProcess ( int status ) { __crtCorExitProcess(status);

    /*
     * Either mscoree.dll isn't loaded,
     * or CorExitProcess isn't exported from mscoree.dll,
     * or CorExitProcess returned (should never happen).
     * Just call ExitProcess.
     */

    ExitProcess(status);

}

何が起こっている可能性がありますか?

4

1 に答える 1

-1

ある時点で、物事が機能し始めました。最初の DLL のセッション内で 2 番目の DLL をデバッグする必要があり、これは長時間動作しなかった後に自動的に発生し始めたことが判明しました。必要なのは、2 番目の DLL に DebugBreak() が含まれていることだけです。

私はある時点で (他のレフト フィールド ソリューションの一部として) 「すべてを中断」し、何度もクリーンアップし、Visual Studio セッションを複数回再起動したことを知っています。LoadLibrary() の前の最初の DLL に常に DebugBreak があり、2 番目の DLL の先頭に別の DebugBreak があることを示唆する以外に、説明はありません。最初の DLL で DebugBreak() を省略すると、2 番目の DebugBreak() が妨害される可能性があります。

于 2013-08-27T20:33:57.803 に答える