调试DLL的发布版本(使用PDB文件)

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

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

编辑:

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

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


pdb通常(至少对我来说)检测它是否在dll旁边(就像使用intellisense xml文件一样)。

另外; 在模块加载后您需要一个断点...

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


是的,您可以使用PDB调试发布代码。 但是,有些调试优化代码存在一些缺陷,更多信息在这里和这里。

您的PDB只需放在调试器可以找到的地方 - 用于本地调试同一目录,因为dll通常是最简单的。 否则,把它放在调试器可以找到它的地方,然后用符号路径将调试器指向那个地方。


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

首先,它基本上按预期工作。 这意味着,如果我有一个构建在release-configuration中的DLL加上相应的PDB文件,那么我可以调试该DLL中包含的类/方法。

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

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

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

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

链接地址: http://www.djcxy.com/p/74555.html

上一篇: Debugging a release version of a DLL (with PDB file)

下一篇: Visual Studio .Net source stepping for System.Linq