我可以[非常有用]通过放置DebugBreak()然后附加到我的Visual Studio会话来调试我的DLL。但是,该DLL执行LoadLibrary()以动态加载另一个DLL。 DLL按预期运行,但我似乎无法正确设置断点。
当我在第二个DLL中放置一个DebugBreak()然后使用该项目附加到它时,我的VS会话总是跳转到支持进程管理的Visual C ++库中的某个点,此函数似乎已经完成执行:
(crt0dat.c)
void __cdecl __crtExitProcess( int状态 ) { __crtCorExitProcess(状态);
/*
* 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);
}
可能会发生什么?
答案 0 :(得分:-1)
在某些时候,事情开始奏效了。事实证明,第二个DLL必须在第一个DLL的会话中进行调试,并且这在长时间不工作后自动开始。所需要的只是第二个DLL中有一个DebugBreak()。
我知道我在某一点上做了“全部破解”(作为其他一些左侧场解决方案的一部分),清理了很多次,并多次重新启动我的Visual Studio会话。我没有解释,除了建议你在LoadLibrary()之前的第一个DLL中总是有一个DebugBreak,而在第二个DLL的顶部有另一个。省略第一个DLL中的DebugBreak()可能会在第二个DLL中破坏DebugBreak()。