问题 如何调试(步入)我的项目中引用的类库,并具有.pdb和源代码?


在Visual Studio(2015)中调试打开的解决方案/项目时,我想调试(步入)一个位于其中一个引用的程序集中的方法调用。程序集有.pdb(复制本地)和源代码。这个程序集实际上也是我的类lib项目,但不在当前的解决方案中,而是在其他解决方案中。

我知道调试这个程序集的简单解决方案是将其项目添加到当前解决方案而不是引用它,然后调试体验将是无缝的。但是由于某些原因,在我的情况下这不会太有效,例如有 许多 我应该添加的程序集(数十个),我不想以一个巨大的解决方案结束。

到目前为止我做过/尝试过的事情:

  • 我已取消选中我的代码
  • 我已经检查过.pdb是否将其他程序集复制到我当前项目的输出文件夹中。
  • 试图在呼叫之前设置断点,然后步骤 。没有成功,电话刚刚开始 过度
  • 我想调试的程序集将作为NuGet包(不是简单的浏览引用)。仍然如此,这是我的类lib项目,带有.pdb,源代码可以在我的本地磁盘中找到。
  • 查看Window-> Debug-> Modules:符号状态:符号已加载。用户代码:N / A.符号文件位置是Temp Asp文件。 (这是一个ASP.NET MVC应用程序)
  • 因为它来自NuGet包,它的构建版本是Release版本,但目前尚未优化,并且 具有 最新的.pdb

我记得这个调试功能有时会出人意料地自动完成,但现在却没有。

我错过了什么?


5716
2017-08-19 05:05


起源

看看Window-> Debug-> Modules - 它会告诉你PDB是否匹配(最有可能的问题)。 - Alexei Levenkov
对于该特定程序集:源代码:N / A和符号状态:已加载符号,位于Temp Asp文件中的符号文件 - g.pickardou
您可以将类库解决方案中的调试器附加到主可执行文件吗? - Brendan Green
@BrendanGreen主要可执行文件是IIS,因为它是一个ASP.NET项目。另外我想在当前的解决方案中调试源代码。我记得我曾要求为我工作的这个功能...... - g.pickardou
也许来源不完全匹配......应该有复选框以允许源版本不匹配... - Alexei Levenkov


答案:


这种经历的最常见原因是:

  1. 启用“我的代码”(工具 - >选项 - >调试)
  2. 不匹配的PDB
  3. 不匹配的消息来源

你排除了1,所以检查另外2:

打开Debug-> Windows-> Modules并找到遇到问题的程序集。确保它从您期望的位置加载,具有您期望的版本,检查PDB是否已加载。您可能需要尝试加载/重新加载PDB以查看VS是否对其所在的PDB感到满意。

如果PDB匹配,VS应该开始询问源位置。有关源代码的信息是PDB的一部分,因此它会告诉您源代码是否匹配(有选项允许加载不匹配的源文件,但您将获得有趣的调试expirience)。

请注意,如果您为RELEASE构建库,它将进行优化,对于某些函数,由于在JIT时间内联或编译时间优化死代码,您根本无法调试它们(如 if (false) 分支机构)。为了获得最佳的实际效果,请确保使用具有匹配PDB的DEBUG程序集,并确保在调试器选项中尽早附加“禁止加载优化”。


12
2017-08-19 17:17



关于查看Window-> Debug-> Modules的建议。我发现了问题:在模块窗口中我尝试显式加载.pdb并得到“PDB与图像不匹配”错误。事实证明,发布版本生成的.pdb不适合调试(顺便说一句它适合什么?),原因有二:a)编译优化,b)Project properties / Build中的.pdb选项/ [高级]设置为“仅PDB”而不是“完整”。包装起来:这是VS的一个丑陋特征,即使是最新的匹配.pdb和源也是如此 - g.pickardou


我也遇到过这个问题,我尝试过很多提示。然而我发现在我的背景下的问题是:

  • 所需的.dll已安装到GAC(全局程序集缓存)中。

我删除了它,我可以再次进入DLL代码。


1
2017-08-31 08:46





我需要多次这样做,我遵循的简单方法是:

1)确保要使用最新源代码构建要调试的类库

2)将dll和.pdb文件从类库的bin / debug目录复制到应用程序输出目录中

3)运行带有调试器的应用程序(如果是web应用程序,直接从浏览器访问它,如果是console / winform / wpf - 只需单击相应的exe)

4)使用特定的进程exe(或Web应用程序的WP3 IIS工作进程)连接visual studio open和类库源代码,并将其设置为!!


0
2018-02-12 18:29



你如何做第4项? - niico