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

时间:2009-04-20 20:40:45

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

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

如果是,所需的步骤/配置是什么(例如放置PDB文件的位置)?

修改

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

这可能是编译器优化的结果(正如迈克尔在他的回答中所描述的那样)?

4 个答案:

答案 0 :(得分:13)

如果pdb位于dll旁边(就像使用intellisense xml文件一样),通常会检测到pdb(至少对我而言)。

可替换地;模块加载后你需要一个断点......

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

答案 1 :(得分:5)

是的,您可以使用PDB调试发布代码。但是,调试优化代码,更多信息herehere会有一些陷阱。

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

答案 2 :(得分:5)

我终于找到了调试在发布配置中构建的DLL的问题:

首先,它基本上按预期工作。这意味着,如果我有一个内置于发布配置的DLL加上相应的PDB文件,那么我可以调试该DLL中包含的类/方法。

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

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

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

所以一切都按预期运作。非常感谢您的回答。

答案 3 :(得分:2)

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

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