如何调试引用的 dll (有 pdb)

我的工作空间里有两个解决方案,比如 A 和 B。

解决方案 A 是一个较老的项目,我完成了一段时间前的编码。 在解决方案 B 中,我需要使用解决方案 A 中的一些类,为此,我添加了对解决方案 A 中一个项目的 dll 的引用。

问题是当我尝试调试。我也想进入 A 的代码。VisualStudio 无法加载这些类的代码(“当前位置没有可用的源代码”)我只能看到反汇编,这是没有用的。

我所知道的从解决方案 A 调试类的唯一方法是运行解决方案 B,分离所有进程(在“调试”菜单项中)并从解决方案 A 附加进程。

但是,这非常不方便,我只能一次调试 A 或 B。

有没有一种方法可以允许单步执行引用的 dlls 代码(我有它的源代码) ?


解决方案: 我的错误在于我认为一个项目只能是单一解决方案的一部分。事实上,一个项目可以是任意数量的解决方案的一部分。
当需要引用旧项目时,只需将该项目添加到解决方案中。这是通过右键单击解决方案资源管理器 > 添加 > 现有项目中的新解决方案来完成的。
然后,您就可以添加项目引用。正如其他人所写的,您可能应该完全避免使用 dll 引用到您自己的代码(或者您可能需要更改和调试的其他代码)。

MSDN中可以找到关于如何设计解决方案的非常好的参考资料。

215734 次浏览

如果你有一个 项目参考,它应该立即工作。

如果是 文件(dll)引用,则需要将调试符号(“ pdb”文件)放在与 dll 相同的文件夹中。检查您的项目是否正在生成调试符号(项目属性 = > Build = > Advanced = > Output/Debug Info = full) ; 如果您有 复制的 dll,则将 pdb 与其放在一起。

如果您不想复制任何文件,也可以直接在 IDE 中加载符号,但这需要更多的工作。

最简单的选择是使用项目引用!

它必须工作。我用来调试一个.exe 文件和一个 dll 在同一时间! 我的建议是 1)在你的 B 项目中包含 dll 的路径, 2)然后在调试中编译你的 A 项目 3)控制路径指向 A dll 和 de pdb 文件..。 4)之后,你开始调试 B 项目,如果一切正常,你将能够在两个项目中进行调试!

需要记住的另一点是,确保引用的 dls 没有安装在 GAC 中。测试之后,我将 dls 安装到 GAC 中以进行系统级测试。后来,当我必须再次调试代码时,我无法进入引用的程序集,直到从 GAC 中删除它们。

我不想在我的一些解决方案中包含外部类库项目,所以我以不同的方式使用程序集。

我的解决方案有一个“公共程序集”目录,其中包含来自其他项目的我自己的 DLL。我引用的 DLL 也有它们的随附 PDB 文件用于调试。

为了调试和设置断点,我在使用应用程序的源代码中设置了一个断点,在这里我从程序集调用一个方法或构造函数,然后步骤 INTO (F11)调用方法/构造函数。

调试器将在 VS 中加载程序集的源文件,此时可以在程序集内部设置新的断点。

它并不直接,但如果您不想包含新的项目引用,而只是想引用共享程序集,那么它可以工作。

我也有同样的问题,我发现他就是:

1)确保所有的项目使用相同的框架(这是至关重要的!)

2)在工具/选项 > 调试 > 常规确保没有勾选「启用仅我的代码(只管理)」

3)在工具/选项 > 调试 > 符号清除所有缓存的符号,取消勾选及删除「符号档案(。除了默认的“微软符号服务器”之外,“位置”列表框仍然取消了它。同时删除“此目录中的缓存符号”文本框中的任何静态路径。点击“空符号缓存”按钮。最后确保勾选“仅指定模块”单选按钮。

4)在所有项目的 Build/Configuration Manager 菜单中,确保配置处于 Debug 模式。

如果要在引用的 dll 的源代码中设置断点,首先要确保有一个 pdb 文件可用。然后您可以打开相关的源代码文件并在那里设置一个断点。源文件不需要成为解决方案的一部分。 正如在 < a href = “ https://stackoverflow. com/questions/2617659/How-can-i-set-a-breakpoint-in-reference-code-in-Visual-Studio”> 中解释的那样,我如何在 Visual Studio 中在引用的代码中设置断点?

您可以通过 Debug-> Windows-> Breakpoints 窗口查看断点。

这种方法的好处是,不需要仅仅为了调试目的而将现有项目添加到解决方案中,因为省略它节省了我大量的构建时间。显然,构建只包含一个项目的解决方案要比构建包含许多项目的解决方案快得多。

步骤1: 转到 < strong > Tools —— > Option —— > Debug

步骤2: 取消选中启用 Just My Code

步骤3: 取消选中要求源文件与原始版本完全匹配

步骤4: 取消选中属性和运算符上的步骤

第五步: 转到 < strong > Project properties —— > Debug

步骤6: 检查启用本机代码调试

我将 *.pdb文件放在同一个文件夹中,并使用了来自 阿林达姆的选项,但它仍然不能工作。原来我需要启用 启用本机代码调试,它可以在 工程项目属性 > 调试下找到。

确保您的 DLL 没有在 GAC 中注册。VisualStudio 将在 GAC 中使用该版本,并且它可能没有调试信息。

我发现使用 VisualStudio 2019调试 NuGet 中引用的外部库的最直接的方法是采取以下步骤:

  1. 工具 > 选项 > 调试 > 常规 > 取消勾选「启用我的程式码」

  2. 转到 Assembly Explorer > Open from NuGet Packages Cache List item

  3. 在搜索框中输入要调试的 NuGet 软件包名称,然后单击“确定” enter image description here

  4. 在程序集资源管理器中,右键单击导入的程序集并选择“ Generate” Pdb’ enter image description here

  5. 选择要保存.PDB 文件和所需框架的自定义路径 产生的

    enter image description here

  6. 将生成的文件夹中的.PDB 文件复制到 Debug 文件夹,现在可以设置 此程序集的库代码

  7. 上的断点

下面的解决方案对我很有效。它涉及到复制粘贴。DLL 和。Pdb 文件正确地从项目 A 到项目 B: Https://stackoverflow.com/a/16546777/5351410

VisualStudio2022向解决方案资源管理器添加了一个新的顶级节点: External Sources,您将在调试模式下找到该节点。你可以从那里看到所有装载的 DLL。您还可以在调试模式下查看从 Debug -> Windows -> Modules加载的模块。从那里,右键单击所需的 dll,然后单击 open file location,然后将 pdb 文件复制到该位置。这应该允许您从同一个视觉工作室窗口进入外部 dll 的任何方法。

参考资料: https://devblogs.microsoft.com/visualstudio/debugging-external-sources-with-visual-studio/