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

M4N*_*M4N 21 c# debugging visual-studio-2008 pdb-files

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

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

编辑:

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

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

Mar*_*ell 13

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

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

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

  • PDB旁边的DLL,符号被加载,但我仍然无法进入方法.任何的想法? (2认同)

Mic*_*ael 5

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

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


M4N*_*M4N 5

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

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

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

[System.Diagnostics.DebuggerStepThrough]
public class MyClass {
    public void Test() { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

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