如何debugging引用的DLL(有PDS)
我的问题涉及到Visual Studio 2008,尽pipe我想在VS2005中它应该是一样的
在我的工作空间中有两个解决scheme,A和B.
解决schemeA是我前一段时间编写的一个较旧的项目。 在解决schemeB中,我需要使用解决schemeA中的一些类。为此,我在解决schemeA中添加对其中一个项目的dll的引用。
问题是当我尝试debugging。 我希望能够进入A的代码。 Visual Studio不能加载这些类的代码(“没有可用的当前位置的源代码”),我只能查看反汇编,这是没有用的。
我知道从解决schemeA中debugging类的唯一方法是运行解决schemeB,分离所有进程(在“debugging”菜单项中)并附加解决schemeA中的进程。
但是,这是非常不方便的,我只能一次debuggingA或B.
有没有办法让步进入引用DLL的代码(我有源代码)?
解决scheme:我的错误是我认为一个项目只能是单一解决scheme的一部分。 事实上,一个项目可以是任何数量的解决scheme的一部分。
当您需要引用旧项目时,只需将项目添加到解决scheme即可。 这可以通过在解决scheme资源pipe理器>添加>现有项目中右键单击新的解决scheme来完成。
然后,您将能够添加项目引用。 正如其他人写的,你应该完全避免使用dll引用你自己的代码(或其他代码,你可能需要更改和debugging)。
有关如何devise解决scheme的非常好的参考可以在MSDN中find。
如果你有一个项目的参考,它应该立即工作。
如果它是一个文件 (dll)引用,则需要debugging符号(“pdb”文件)与dll位于同一个文件夹中。 检查你的项目是否正在生成debugging符号(项目属性=> Build => Advanced => Output / Debug Info = full); 如果你已经复制了DLL,把它与PDB。
如果您不想复制任何文件,也可以直接在IDE中加载符号,但这样做更有效。
最简单的select是使用项目引用!
我遇到过同样的问题。 他是我发现的:
1)确保所有项目都使用相同的框架(这是至关重要的!)
2)在工具/选项>debugging>一般确保“启用只是我的代码(只pipe理)不打勾
3)在工具/选项>debugging>符号清除任何caching的符号,取消和删除“符号文件(.pdb)位置”列表框下的所有文件夹位置,除了默认的“微软符号服务器”,但仍然取消它。 还要删除“在此目录中caching符号”文本框中的任何静态path。 点击“空符号caching”button。 最后确保“仅指定的模块”单选button被勾选。
4)在所有项目的Build / Configuration Manager菜单中,确保configuration处于Debug模式。
还有一点要记住,请确保引用的dll没有安装在GAC中。 经过testing,我安装了我的dll到GAC来做系统级的testing。 后来,当我不得不再次debugging我的代码时,我无法进入引用的程序集,直到我从GAC中删除它们。
当你想在被引用的dll的源代码中设置一个断点时,首先确保你有一个可用的pdb文件。 然后你可以打开相关的源代码文件并在那里设置一个断点。 源文件不需要成为您的解决scheme的一部分。 如何在Visual Studio中的引用代码中设置断点?
您可以通过断点窗口(可通过Debug – > Windows – > Breakpoints)查看断点。
这种方法的好处是,您不需要为了debugging目的而将现有的项目添加到您的解决scheme中,因为它为我节省了大量的构build时间。 显然,只用一个项目构build一个解决scheme要比用很多解决scheme构build解决scheme要快得多。
第1步:转到工具 – >选项 – >debugging
第2步:取消选中启用只是我的代码
第3步:取消选中需要源文件与原始版本完全匹配
步骤4:取消选中“跳过属性和操作员”
它必须工作。 我曾经同时debugging一个.exe文件和一个dll! 我build议是1)在你的B项目中包含dll的path,2)然后编译debugging你的A项目3)控制path指向A DLL和DE PAB文件…. 4)之后,你开始debuggingB项目,如果一切正常,您将能够在两个项目中进行debugging!
我不想在我的一些解决scheme中包含外部类库项目,所以我进入到以不同方式使用的程序集中。
我的解决scheme有一个“Common Assemblies”目录,其中包含我自己的其他项目的DLL。 我参考的DLL也有其伴随的PDB文件进行debugging。
为了debugging和设置断点,我在消费应用程序的源代码中设置了一个断点,我从程序集中调用方法或构造函数,然后执行INTO(F11)方法/构造函数调用。
debugging器将在VS中加载程序集的源文件,并可以在程序集中设置程序集中的新断点。
这不是直接的,但如果你不想包括一个新的项目引用,而只是想引用一个共享程序集的作品。