如何在Visual Studio中调试外部类库项目?


137

我有一个引用来自另一个vs解决方案中的外部project(B)类库的程序集的project(A)。

我尚未了解如何在从项目A运行程序的同时有效地从B调试类库。是否需要在项目B上启用某些功能(例如调试信息等),以便可以在调试时从A进入?

提前致谢。

Answers:


202

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

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

默认情况下,调试器尝试将世界范围限制为仅包含在解决方案中的代码。有时这确实很有用,但是当您要调试解决方案中未包含的代码(视您的情况而定)时,您需要禁用JMC才能看到它。否则,代码将被视为外部代码,并且在您看来基本上是隐藏的。

编辑

当您的代码陷入困境时,请尝试以下操作。

  • 调试-> Windows->模块
  • 找到您感兴趣的项目的DLL
  • 右键单击->加载符号->选择其他项目的.PDB路径

2
尚未选中特定复选框。我注意到的是,它确实输入到外部库的方法中,但是当我尝试调用属于接口一部分的方法时,它会逐步执行。
康斯坦丁诺斯2009年

您可能需要转到DLL的属性,并确保将“本地复制”设置为True。否则,模块将无法找到.pdb供您参考。
Bryan Rayner 2014年

只是我的代码似乎没有什么区别(即使启用了我也可以跳至外部代码),但是在调试器中找到模块会有所帮助。
TheOperator 2015年

3
在此文件夹中找不到匹配的符号文件。
克里斯汀

1
如果您没有所引用模块的PDB文件,则可以使用Debug / Windows / Modules右键菜单中的“使用ReSharper Deecompiler加载符号”选项来使用ReSharper来反编译二进制文件。很强大。
emilast

12

这困扰了我一段时间。我通常最终要做的是使用调试模式重建我的外部库,然后将.dll和.pdb文件复制到我的网站的bin中。这使我可以进入自由代码。


10

假设路径

项目 A

C:\Projects\ProjectA

项目 B

C:\Projects\ProjectB

并且ProjectB的dll在

C:\Projects\ProjectB\bin\Debug\

要调试到ProjectBProjectA,请执行以下操作

  1. B包含dll的dll 复制.PDBProjectA的编译目录。
  2. 现在调试ProjectA。当代码到达需要在调试时调用dll的方法或事件等的部分时,按F11进入dll的代码。

注意:请不要复制.PDB文件


5

我运行Visual Studio的两个实例-一个用于外部dll,一个用于主应用程序。
在外部dll的项目属性中,设置以下内容:

构建事件:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

调试:

  • 启动外部程序: C:\<path-to-main>\bin\debug\<AppName>.exe

  • 工作目录 C:\<path-to-main>\bin\debug

这样,每当我构建外部dll时,它都会在主应用程序的目录中得到更新。如果我从外部dll的项目中命中调试,则主应用程序将运行,但调试器仅会命中外部dll中的断点。如果我从主项目中命中调试,则主应用程序将使用最新构建的外部dll运行,但是现在调试器仅命中主项目中的断点。

我意识到一个调试器可以同时完成这两个任务,但是我发现以这种方式保持两者一致很容易。


1

[根据马丁·贝克特(Martin Beckett)的话,他给我发送了这个答案]

您可以调试到外部库中。

在项目设置选项卡中的“源代码”字段中查找“ Visual Studio目录”,其中包含指向openCV源代码的路径。然后,确保每个调试dll的.pdb文件都与dll位于同一目录中。


0

我遇到了类似的问题,因为我的项目(B)的断点没有被击中。我的解决方案是重建项目(B),然后调试项目(A),因为需要更新dll。

Visual Studio应该允许您调试到外部库中。


0

NuGet参考

假定通过NuGet软件包对Project_A的-Project_A(产生project_a.dll)和Project_B(产生project_b.dll)和Project_B引用,然后将project_a.dll,project_a.pdb复制到文件夹Project_B / Packages。实际上,应该将其复制到/ bin。

现在调试Project_A。当代码到达需要在调试时调用dll的方法或事件等的部分时,请按F11键进入dll的代码。

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.