调试延迟加载dll

时间:2021-02-02 11:59:03

标签: c++ debugging dll eclipse-cdt remote-debugging

我正在使用 Eclipse 和 Cygwin-GCC 创建一个 DLL 文件。这个 DLL 然后由我没有来源的第三方应用程序执行。我只是运行它,有时它会从我的 DLL 中执行一个函数。

是否可以使用 Eclipse 将 Cygwin-GDB 附加到第三方进程以调试我自己的 DLL 文件? 据我所知,Visual Studio 可以将其调试器附加到进程中。 Visual Studio 能够立即执行我想要的操作吗? 这也可以通过 Eclipse 以某种方式实现吗?

请帮忙。

1 个答案:

答案 0 :(得分:2)

回答您的部分问题:是的,Visual Studio 可以立即执行您想要的操作……前提是您在执行代码之前附加到流程中。我不是 Eclipse 的忠实粉丝,所以我不使用它,也无法告诉您它是否能够附加到已经运行的进程。

无论您使用的是什么调试器...由于它延迟加载,您可以在入口点添加一些内容,例如:

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
#if ALERT_ATTACH_DEBUGGER
            ::MessageBox("Attach debugger now!", "Debug Alert", MB_OK);
#endif
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }

    return TRUE;
}

当您的消息框出现时,在列表中找到宿主进程并附加...之后,您在代码中设置的任何断点都将起作用。