Visual Studio:调试引用的DLL,我在另一个SLN中有源代码

74

我正在尝试调试一个项目,该项目引用了我添加的DLL文件,该DLL文件存储在外部目录中,并且我刚刚添加了引用。现在当然可以调试我的项目,但是调用另一个dll上的方法行时,我无法进入它,即无法使用F12。

一种方法是将我的项目(dll)作为现有项目添加到我的解决方案中,并替换引用的dll以使用附加的项目而不是磁盘上的文件。

但多么混乱啊,我相信还有更好的方法吧?

我记得如果复制一些PDB文件之类的东西,但我记不清了。我需要打开两个Visual Studio窗口吗,一个用于主项目,另一个用于引用的DLL吗?


尝试复制PDB文件。我相信这将类似于对Microsoft符号服务器的引用方式。 - P.Brian.Mackey
5个回答

84

在您自己的计算机上使用 Debug 模式重新构建第二个解决方案(这样 PDB 文件中的文件路径将特定于您的计算机)。

两个 .DLL 和 .PDB 文件复制到您的引用文件夹中。Visual Studio 将自动识别 .PDB 文件并使用文件路径来显示源代码。

当所引用的程序集在其他地方构建时,您还可以使用符号服务器和源代码服务器来实现此功能:http://msdn.microsoft.com/en-us/library/vstudio/ms241613.aspx


14
如果通过直接方法调用无法进入DLL的代码,你如何在其中添加断点? - Krisztián Balla
2
@JennyO'Reilly,你可以在你的解决方案中编译 System.Diagnostics.Debugger.Break() (https://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx) 方法调用。显然要小心,不要让它出现在生产代码中(也许可以使用 #if DEBUG 预编译语句)。 - Liam
6
@Liam 或者你可以在同一个 Visual Studio 实例中打开 cs 文件并添加断点。 - Maarten
这对我有用!这就是我不介意在SO中有重复问题的地方。这个问题对我来说没有正确的答案:https://dev59.com/6HNA5IYBdhLWcg3wAIzd - Jess
非常好的答案,但是必须要重新启动VS!我在那上面花费了几个小时... - p__d
显示剩余2条评论

18

我通过以下方法得出了解决方案

尝试禁用"Just My Code" (JMC).

工具 -> 选项 -> 调试器 取消选中 "启用Just my Code"。


在尝试重新编译和重新引用dll文件一个小时后,我再怎么点赞也不为过! - dhysong

1
我曾经遇到同样的问题,通过清理和重建解决方案来解决。这将纠正.pdb文件中的引用,以定位并在第二个项目中触发断点。

0

当您进行调试构建时,所有的dll和pdb文件都会在主机项目中建立。因此,不需要手动复制文件。

右键单击解决方案,选择添加/现有项目... 导航到类库文件夹并选择proj文件(例如myproj.csproj)。 文件不会被复制,只是被引用,您可以在IDE中打开类的源代码,并以正常方式设置断点,它就可以工作了。


0
Visual Studio 2022 在解决方案资源管理器中增加了一个新的顶级节点:External Sources,您可以在调试模式下找到它。您可以从那里查看所有已加载的 dll。您还可以在调试模式下从 Debug -> Windows -> Modules 查看已加载的模块。从那里,右键单击所需的 dll,然后单击打开文件位置,然后将 pdb 文件复制到该位置。这样就可以进入外部 dll 的任何方法。 参考:https://devblogs.microsoft.com/visualstudio/debugging-external-sources-with-visual-studio/

嗨,Rayhan,我正在尝试为其中一个dll加载符号。在加载符号时,它会打开项目文件夹并要求打开pdb文件。但是我找不到相关的文件。你能指导一下吗? - Bhargavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接