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

Kon*_*nos 121 debugging visual-studio

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

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

提前致谢.

Jar*_*Par 187

尝试禁用Just My Code(JMC).

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

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

编辑

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

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

  • 已取消选中特定复选框。我注意到的是,它确实进入了外部库的方法,但是当我尝试调用作为接口一部分的方法时,它会跳过。 (5认同)
  • 在此文件夹中找不到匹配的符号文件. (3认同)
  • 如果您没有引用模块的 PDB 文件,可以使用“调试”/“Windows”/“模块”中右键菜单中的“使用 ReSharper Deecompiler 加载符号”选项,使用 ReSharper 来反编译二进制文件。很强大。 (3认同)
  • @Christine如果遇到“此文件夹中未找到匹配的符号文件”。然后在项目中查找引用,将其删除,在本地构建引用的源并引用输出dll。如果在本地构建该 dll,则会生成一个 PDB 文件,现在会自动获取该文件。因此,仅出于调试目的,您临时更改参考, (2认同)

The*_*per 12

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

  • 在过去的 8 年里,您有没有找到更好的解决方案? (4认同)

Sar*_*avu 7

假设的路径

项目 A

C:\Projects\ProjectA
Run Code Online (Sandbox Code Playgroud)

项目 B

C:\Projects\ProjectB
Run Code Online (Sandbox Code Playgroud)

并且ProjectB的dll在

C:\Projects\ProjectB\bin\Debug\
Run Code Online (Sandbox Code Playgroud)

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

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

注意:不要错过复制.PDB文件


Mat*_*ice 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运行,但现在调试器只能在主项目中遇到断点.

我意识到一个调试器将为两者做好工作,但我发现用这种方式保持两者更容易.