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


67

我正在尝试调试一个对添加的DLL有引用的项目,该DLL存储在外部目录中,而我刚刚添加了一个引用。现在当然可以调试我的项目了,但是在我的其他dll上调用方法的那行我无法介入,即F12。

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

但是,有什么烂摊子,我确定有更清洁的方法吗?

我似乎记得是否复制了某些PDB文件或其他内容,但我不记得了。我是否需要打开Visual Studio的2个副本,主项目1个,引用的DLL 1个?


尝试复制PDB文件。我相信这将类似于引用Microsoft符号服务器的工作方式。
P.Brian.Mackey,

Answers:


75

在您自己的计算机上以“调试”模式重建第二个解决方案(以使该PDB中的文件路径特定于您的计算机)。

复制将.dll和.pdb文件到您的引用文件夹。Visual Studio将自动拾取.PDB文件,并使用文件路径显示源。

当在其他位置构建引用程序集时,也可以使用Symbol Server和Source Server来实现此目的:http : //msdn.microsoft.com/zh-cn/library/vstudio/ms241613.aspx


13
如果无法通过直接方法调用直接进入代码,如何在DLL的代码中添加断点?
了Krisztián巴拉

那是一个很好的答案。我想知道为什么我不能调试DLL!我错过了复制.PDB文件的操作。一旦被复制,它工作得很好:) @Knaģis
萨拉特KS

2
@ JennyO'Reilly,您可以将System.Diagnostics.Debugger.Break()msdn.microsoft.com/zh-cn/library/…)方法调用编译到您的解决方案中。显然要小心,这不会最终出现在生产代码中(也许使用#if DEBUG预编译语句)
Liam 15'9

6
@Liam或者,如果您在同一Visual Studio实例中打开断点,则可以仅在cs文件中添加断点。
Maarten 2015年

这对我有用!在这里,我不介意在SO中有重复的问题。这个问题没有正确的答案对我来说:stackoverflow.com/questions/1130417/...
杰斯

13

我通过执行以下操作获得了解决方案

尝试禁用“我的代码”(JMC)。

工具->选项->调试器取消选中“仅启用我的代码”


花了一个小时尝试重新编译并重新引用dll之后,我对此表示不满!
dhysong

1

我遇到了同样的问题,可以通过清洁和重建解决方案来解决。它将更正.pdb文件中的引用,以查找并击中第二个项目中的断点。


0

进行Debug构建时,所有dll和pdb文件都在宿主项目中建立。因此,无需手动复制文件。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.