如何调试引用的dll(有pdb)

Ela*_*lad 123 c# visual-studio-2005 visual-studio-2008 visual-studio

我的问题与Visual Studio 2008有关,虽然我认为在VS2005中应该是这样的

我的工作区有两个解决方案,比如A和B.

解决方案A是一个较旧的项目,我在前一段时间完成了编码.在解决方案B中,我需要使用解决方案A中的一些类.为此,我在解决方案A中添加了对其中一个项目的dll的引用.

问题是当我尝试调试时.我希望能够进入A的代码.Visual Studio无法加载这些类的代码("当前位置没有可用的源代码.")而且我只能查看反汇编,这是无用的.

我知道从解决方案A调试类的唯一方法是运行解决方案B,分离所有进程(在Debug菜单项中)并从解决方案A附加进程.

但是,这非常不方便,我只能一次调试A OR B.

有没有办法允许单步执行引用的dll代码(我有源代码)?


解决方案:我的错误在于我认为项目只能是单一解决方案的一部分.实际上,项目可以是许多解决方案的一部分.
当您需要引用旧项目时,您只需将项目添加到解决方案中.通过在解决方案资源管理器>添加>现有项目中右键单击新解决方案来完成此操作.
然后,您将能够添加项目引用.正如其他人所写,你应该完全避免使用dll引用你自己的代码(或者你可能需要更改和调试的其他代码).

可以在MSDN中找到有关如何设计解决方案的非常好的参考.

Mar*_*ell 103

如果您有项目参考,它应该立即工作.

如果是文件(dll)引用,则需要将调试符号("pdb"文件)与dll放在同一文件夹中.检查您的项目是否正在生成调试符号(项目属性=> Build => Advanced => Output/Debug Info = full); 如果你复制了dll,请将pdb与它一起放入.

如果您不想复制任何文件,也可以直接在IDE中加载符号,但这样做更有效.

最简单的选择是使用项目引用!

  • @Elad我刚刚这样做了.首先将"现有项目"添加到解决方案中.然后单击添加项目引用添加对项目的引用.您可以在现有项目文件中设置断点.这很好,因为文件不会被复制. (6认同)
  • 不幸的是,我认为不可能从另一个解决方案中添加对项目的项目引用(如果我错了,请纠正我!). (3认同)
  • 我有DLL项目作为项目参考,但忽略了内部断点. (3认同)
  • 对我来说,它一天工作但第二天不工作(有 DLL 和 PDB 文件)。按“工具”>“选项”>“调试”>“符号”上的“清空符号缓存”按钮修复了它。 (2认同)

sco*_*t_f 41

我遇到过同样的问题.他是我发现的:

1)确保所有项目都使用相同的框架(这是至关重要的!)

2)在工具/选项>调试>常规中确保未选中"仅启用我的代码(仅管理)"

3)在工具/选项>调试>符号中清除所有缓存的符号,取消并删除"符号文件(.pdb)位置"列表框下的所有文件夹位置,但默认的"Microsoft符号服务器"除外,但仍然取消它.同时删除"此目录中的缓存符号"文本框中的任何静态路径.单击"清空符号缓存"按钮.最后确保勾选"仅指定模块"单选按钮.

4)在所有项目的Build/Configuration Manager菜单中,确保配置处于Debug模式.

  • 我的问题是我的两个项目使用了不同的.Net框架:4.0和4.5.TX! (3认同)
  • 1) 和 4) 至关重要。不要忘记在调试模式下构建并使用相同的框架。 (2认同)

小智 11

另外要记住的一点是,确保引用的dll没有安装在GAC中.经过测试,我将我的dll安装到GAC中进行系统级测试.后来,当我不得不再次调试我的代码时,我无法进入引用的程序集,直到我从GAC中删除它们.

  • 谢谢!这是我的问题.我无法相信我没有想到这一点: - /我认为设置项目参考会以某种方式覆盖GAC中安装的内容. (2认同)

小智 5

步骤1:进入“ 工具”->“选项”->“调试”

步骤2: 取消选中“仅启用我的代码”

步骤3:取消选中“要求源文件与原始版本完全匹配”

步骤4:取消选中“越过属性和运算符”


Roa*_*ald 5

我将这些*.pdb文件放在同一个文件夹中,并使用了Arindam 中的选项,但它仍然不起作用。原来我需要启用Enable native code debugging,可以在Project properties > Debug下找到。