如何在visual studio中调试外部类库项目?

时间:2009-03-17 15:17:16

标签: visual-studio debugging

我有一个项目(A),它引用位于另一个vs解决方案中的外部项目(B)类库中的程序集。

我还没有理解如何在从项目A运行程序时从B有效地调试类库。我是否必须在项目B上启用某些内容,例如调试信息等,以便我可以在调试时进入来自A?

提前致谢。

8 个答案:

答案 0 :(得分:183)

尝试禁用Just My Code(JMC)。

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

默认情况下,调试器会尝试将世界视图限制为仅包含在解决方案中的代码。这有时非常有用,但是当你想调试不在你的解决方案中的代码时(就像你的情况一样),你需要禁用JMC才能看到它。否则,代码将被视为外部代码,并在很大程度上隐藏在您的视图中。

修改

如果您的代码中断,请尝试以下操作。

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

答案 1 :(得分:12)

这已经困扰了我一段时间。我通常最终做的是使用调试模式重建我的外部库,然后将.dll和.pdb文件复制到我的网站的bin。这允许我进入图书馆代码。

答案 2 :(得分:6)

假设

的路径

项目A

C:\Projects\ProjectA

项目B

C:\Projects\ProjectB

并且ProjectB的dll在

C:\Projects\ProjectB\bin\Debug\

要从ProjectB调试ProjectA,请执行以下操作

  1. B的dll与dll的.PDB复制到ProjectA的编译目录。
  2. 现在调试ProjectA。当代码到达您需要在调试时调用dll的方法或事件等的部分时,按F11以进入dll的代码。
  3. 注意:请勿错过.PDB文件

答案 3 :(得分: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运行,但现在调试器只会在主项目中遇到断点。

我意识到一个调试器会为两者完成这项工作,但我发现以这种方式保持两者更容易。

答案 4 :(得分:1)

[据Martin Beckett所说,给我这个答案的人]

您可以调试到外部库。

在项目设置选项卡中,在“源代码”字段中查找“visual studio目录”,包括openCV源的路径。然后确保每个调试dll的.pdb文件与dll在同一目录中。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

获取参考

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

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

答案 7 :(得分:0)

一次性执行此操作的最快方法是直接在您正在编辑和启动项目 A 的 Visual Studio 实例中打开 Proj B 文件(文件 => 打开 => 文件)。您无需将该文件添加到解决方案中。只需在编辑器中打开它,您就可以直接在项目 B 文件中创建断点。