【问题标题】:DebugBreak in a DLL under another DLL另一个DLL下的一个DLL中的DebugBreak
【发布时间】:2013-08-27 20:33:57
【问题描述】:

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

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

(crt0dat.c)

void __cdecl __crtExitProcess ( 整数状态 ) { __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);

}

会发生什么?

【问题讨论】:

    标签: debugging visual-c++ dll visual-studio-debugging


    【解决方案1】:

    在某些时候,事情开始起作用了。事实证明,第二个 DLL 必须在第一个 DLL 的会话中进行调试,并且在长时间不工作后自动开始发生这种情况。所需要的只是第二个 DLL 中有一个 DebugBreak()。

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

    【讨论】:

    • 这是我对我的问题的回答。这是可能有助于为遇到同样问题的人提供指导的相关信息。谢谢,谁把答案打倒了,不能发表评论。
    猜你喜欢
    • 2012-05-17
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多