0

我可以 [非常有用地] 通过放置 DebugBreak() 来调试我的 DLL,然后附加到我的 Visual Studio 会话。但是,该 DLL 执行 LoadLibrary() 以动态加载另一个 DLL。DLL 按预期运行,但我似乎无法正确设置断点。

当我在第二个 DLL 中放置一个 DebugBreak() 然后使用该项目附加到它时,我的 VS 会话总是跳转到支持进程管理的 Visual C++ 库中的某个点,在函数似乎已经完成执行之后:

(crt0dat.c)

无效 __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 必须在第一个 DLL 的会话中进行调试,并且在长时间不工作后自动开始发生这种情况。所需要的只是第二个 DLL 中有一个 DebugBreak() 。

我知道我在某个时候做了“全部破坏”(作为其他一些左场解决方案的一部分),清理了很多次,并多次重新启动了我的 Visual Studio 会话。我没有任何解释,只是建议您始终在第一个 DLL 中 LoadLibrary() 之前有一个 DebugBreak,另一个在第二个 DLL 的顶部。在第一个 DLL 中省略 DebugBreak() 可能会破坏第二个 DLL 中的 DebugBreak()。

于 2013-08-27T20:33:57.803 回答