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

g.p*_*dou 16 c# debugging visual-studio

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

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

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

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

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

我错过了什么?

Ale*_*kov 17

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

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

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

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

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

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