代码之家  ›  专栏  ›  技术社区  ›  M4N

调试DLL的发布版本(带有PDB文件)

  •  21
  • M4N  · 技术社区  · 15 年前

    如果我有一个DLL(在发布模式下构建)和相应的PDB文件,是否可以调试(单步调试)该DLL中包含的类/方法?

    如果是,需要哪些步骤/配置(例如,将PDB文件放在何处)?

    如果需要,请将PDB文件与DLL放在同一位置(在简单控制台测试应用程序的bin/debug目录中)。我可以看到DLL的符号已加载(在输出窗口和模块窗口中),但我仍然无法进入该DLL的方法。

    这可能是编译器优化的结果吗(正如Michael在回答中所描述的)?

    4 回复  |  直到 14 年前
        1
  •  14
  •   Marc Gravell    15 年前

    如果pdb位于dll旁边(就像intellisense xml文件),则通常(至少对我来说)会检测到它。

    或者;在模块加载后,您需要一个断点。。。

    在断点处,打开“模块”窗口(Ctrl+D、M-或调试->Windows->模块)。右键单击dll“从中加载符号”、“符号路径”等。

        2
  •  6
  •   Community CDub    7 年前

    here here

    您的PDB只需要位于调试器可以找到它的位置—对于本地调试,与dll相同的目录通常是最容易的。否则,请将其放置在调试器可以找到它的某个位置,并使用符号路径将调试器指向该位置。

        3
  •  6
  •   M4N    15 年前

    我终于找到了调试版本配置中内置的DLL时出现问题的原因:

    当我第一次尝试这种方法时,不幸的是,我试图进入一个具有 DebuggerStepThroughAttribute ,例如:

    [System.Diagnostics.DebuggerStepThrough]
    public class MyClass {
        public void Test() { ... }
    }
    

    在这种情况下,当然不可能从调试器进入该方法(如预期/预期)。

    所以一切都按计划进行。非常感谢你的回答。

        4
  •  3
  •   Stephen Nutt    15 年前

    调试发布版本通常比调试调试版本困难得多。一般来说,您需要对x86汇编程序有一些了解,并且可能需要花一些时间查看反汇编窗口。这往往是确定您真正使用哪一行代码的唯一方法,因为在编译器上进行优化的发布版本中,可能会执行重要的内联和指令重新排序。此外,我发现调试器经常无法正确报告变量的值。如果需要知道变量的值,但不确定调试器是否正确,请进入“反汇编”窗口,找到它所在的内存位置或寄存器。

    pdb文件可以存储在符号服务器中。退房 Setting up a Symbol Server 为了一个好的教程。我们在构建机器上构建的每个产品都将符号发布到我们的符号服务器,因此我们始终可以调试从WinQual收到的任何崩溃转储。