【问题标题】:How do I step through the source code of a DLL that is loaded on the fly?如何单步执行动态加载的 DLL 的源代码?
【发布时间】:2011-02-16 06:49:35
【问题描述】:

如何单步调试动态加载的 DLL 的源代码? 我有一个 SLN,它是通过将 BIN 文件加载到 Visual Studio 2008 中自动创建的。它使用命令行界面功能,在这个命令行上,我可以发出命令来加载 DLL。我加载的 DLL 是从源代码构建的。所以我应该能够单步调试这个源代码。

我是否需要以某种方式加载 mdb 或以某种方式告诉集成开发环境如何处理源代码?目前,我无法在源代码中放置任何断点。

【问题讨论】:

    标签: c# c++ visual-studio visual-studio-2008 pdb-files


    【解决方案1】:

    如果你构建了这个 dll,那么你应该能够构建调试符号,并将调试器指向这些文件

    您必须确保 pdb 文件是针对加载的完全相同的二进制文件构建的,否则将找不到符号,因为它们不匹配。

    【讨论】:

    • 如果你想调试两个进程,一个进程调用另一个进程怎么办?换句话说,我如何同时使用两个 Visual Studio 会话?我认为我遇到的问题是因为我从命令行界面加载了一个可执行文件,而 dll 是一个可执行文件加载的进程。
    【解决方案2】:

    如果动态加载 DLL(例如通过 C++ 中的 LoadLibrary),则在加载 DLL 之前不会加载符号。在加载 DLL 的调用之后中断,然后加载 DLL 源并在其中设置断点。加载 DLL 的符号时,您将在 Visual Studio 的 Output 窗格中看到一条消息。

    您还可以通过在调试器选项中指定将加载 DLL 的 EXE 来调试 DLL 解决方案。然后Visual Studio就会知道EXE很可能会加载DLL并提前加载符号。

    【讨论】:

      【解决方案3】:

      您可能需要告诉 MSVC 在哪里可以找到这些 DLL 的 PDB 文件。 PDB 允许调试器查找哪一行源代码与哪个汇编字节匹配。

      在 Tools->Options->Debugging->Symbols 下查看,然后尝试将 PDB 所在的目录添加到那里的对话框中。

      【讨论】:

        【解决方案4】:

        如果 DLL 已经在 GAC 中,那么您的断点可能不起作用。您可能必须从 GAC 中删除删除引用并尝试。

        你检查了吗? http://msdn.microsoft.com/en-us/library/c91k1xcf%28v=vs.80%29.aspx

        【讨论】:

          【解决方案5】:

          删除引用的dll并重新添加。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-18
            • 2011-08-29
            • 2014-06-07
            • 1970-01-01
            • 2015-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多