如何调试(步进)在我的项目中引用的类库,并有.pdb和源代码
本文关键字:类库 并有 pdb 源代码 引用 项目 调试 何调试 步进 我的 | 更新日期: 2023-09-27 18:08:50
在调试Visual Studio(2015)中打开的解决方案/项目时,我想调试(进入)位于其中一个引用程序集中的方法调用。该程序集包含.pdb(本地复制的)和源代码。这个程序集实际上也是我的类库项目,但不是在当前解决方案中,而是在另一个解决方案中。
我知道调试这个程序集的简单解决方案是将其项目添加到当前解决方案中,而不是引用它,然后调试经验将是无缝的。然而,由于某些原因,这在我的情况下不会太有效,例如,我应该添加许多 程序集(数十个),我不想以一个巨大的解决方案结束。
到目前为止我做了什么/尝试了什么:
- 我没有选中,只是我的代码
- 我检查了其他程序集的。pdb被复制到我当前项目的输出文件夹。
- 试图在调用之前设置断点,然后将步进。没有成功,呼叫刚刚跨过 。
- 我想调试的程序集是作为NuGet包来的(不是简单的浏览参考)。仍然是真的,它是我的类库项目,附带.pdb,源代码可以在我的本地磁盘上获得。
- 查看窗口->调试->模块:符号状态:符号加载。用户码:无。符号文件位置是一个临时Asp文件。(这是一个ASP。. NET MVC应用程序)
- 因为它来自一个NuGet包,所以它的构建是一个发布版本,但目前没有优化,并且有最新的。pdb
我记得这个调试特性有时会令人惊讶地自动工作,但是现在它不能了。
我错过了什么?
这种经历最常见的原因是:
- 启用"仅限我的代码"(工具->选项->调试)
- pdb分子不匹配 <
- 不匹配的来源/gh>
你已经排除了1个,所以检查另外2个:
打开调试->Windows->模块,找到你有问题的汇编。确保它是从你期望的位置加载的,有你期望的版本,检查是否加载了pdb。你可能需要尝试加载/重新加载PDB,看看VS是否满意它所处的PDB。
如果pdb匹配,VS应该开始询问源位置。关于源的信息是PDB的一部分,所以它会让你知道源是否匹配(有一个选项允许加载不匹配的源文件,但你会得到有趣的调试经验)。
请注意,如果您为RELEASE构建库,它将被优化,并且对于某些函数,由于在JIT时内联或编译时对死代码(如if (false)
分支)的优化,您将根本无法调试它们。为了获得最佳体验,请确保使用带有匹配PDB的DEBUG程序集,并确保在调试器选项中尽早附加"在加载时抑制优化"。
我也遇到过这个问题,我试过很多方法。然而,我发现问题在我的上下文中是:
- 所需的.dll已安装到GAC(全局程序集缓存)。
我删除了它,我可以再次进入dll代码。
我需要这样做很多次,我遵循的简单方法是:
1)确保你要调试的类库是用最新的源代码构建的
2)将类库bin/debug目录下的dll和.pdb文件拷贝到应用程序输出目录
3)使用附加调试器运行应用程序(如果是web应用程序,直接从浏览器访问它,如果是console/winform/wpf -只需单击相应的exe)
4)附加visual studio打开类库源代码与特定的进程exe(或WP3 IIS工作进程的web应用程序),并设置所有去!