在Visual Studio解决方案中启用和禁用特定项目的“Step into”调试

23
我有一个包含四个C#项目的Visual Studio解决方案。 我想从我的主项目中进入到解决方案中支持项目的代码,但当我使用“单步执行”键时,它只是跳过该项目的调用。我在支持项目中设置了断点,但它们被忽略了,我无法让它进入任何对该项目的引用中。
所有内容都设置为编译为“Debug”,并且我之前见过Visual Studio警告我的断点不会被触发 - 但在这种情况下并没有做出任何提示。好像我的代码将能够进行调试,但在运行时,有某个设置告诉Visual Studio不要逐步执行那个项目的代码。我解决方案中的所有其他项目都可以正常调试。
我勾选了什么选项导致这种行为? 更新说明:“仅限我的代码(Just my code)”选项当前已禁用。此外,由于该代码属于我同一解决方案中的项目,我认为“仅限我的代码”选项不适用于此处。我认为它仅适用于我没有源代码的预编译代码,但由于我在项目中拥有源代码,因此此选项没有任何效果。
7个回答

17

不确定是否正确,但 "工具 > 选项 > 调试 > 常规:启用仅调试我的代码" 是一种可能性。(我更喜欢保持未选中状态。)


14
事实证明,在调试之前必须将程序集复制到GAC中。在调试选项“仅我的代码”下,如果没有任何用户代码,则有一个选项可以抑制错误,并且它正在抑制以下错误:

以下移动设备是使用启用了优化或没有启用调试信息的方式构建的。(模块名称和路径) 若要调试此模块,请将其构建配置更改为调试模式。

由于我是在Debug配置中构建它,所以我搜索了该错误消息并得到了这个结果:

http://claytonj.wordpress.com/2008/01/04/the-following-module-was-built-either-with-optimizations-enabled-or-without-debug-information/

问题已解决。我不知道为什么需要将它放在全局程序集缓存中才能进入项目,但确实需要。我不问为什么,只问如何,然后我就这样做了...

天啊,这个问题让我浪费了一个早上。谢谢你。 - mmr
这可能是一个愚蠢的问题,但是在Windows7上如何将dll(或任何文件)复制到C:Windows / Assembly中?拖放,复制和粘贴对于这个特定的目录是不可用的。 - rank1
http://blogs.msdn.com/b/johnwpowell/archive/2009/01/14/how-to-copy-an-assembly-from-the-gac.aspx - rank1
我遇到了相同的问题,我的解决方案中有4个项目,但我不知道GAC是什么,也不知道如何解决这个问题。 - solujic

7

需要检查的一件事是,您的支持项目程序集未安装在全局程序集缓存中。打开命令提示符并运行以下命令以确保...

gacutil /l assemblyName

注:请勿删除HTML标记。

5

你需要确保支持项目有pdb文件,否则Visual Studio将没有必要的信息来逐步执行代码。


5
如果您有尝试进入的dll的源代码,请执行以下操作:
  1. 单击包含这些dll作为引用的项目,并将它们删除。
  2. 将相应dll的项目添加到解决方案中
  3. 右键单击该项目->添加引用->选择新添加的项目。
现在设置断点并调试代码。您将能够进入代码。
出现此问题的原因是您的程序仍然引用旧的dll(没有源代码),因为它已被添加到您的项目作为引用。一旦删除该dll并添加dll的项目(源代码),Visual Studio就可以进入您的代码。

3

有两个可能性:

  • 有一个复选框可以选择“仅限我的代码”。它的目的是使您无法进入Microsoft的Framework代码(除非您取消选中该框以进入)。

  • 您可以尝试重新编译支持代码,以确保您正在调试的代码完全匹配您正在查看的代码文件。VS确实关心这一点,并且如果您将断点放在版本不匹配的代码文件中,则会禁用它。此外,请确保PDB文件与DLL文件位于同一目录中。


2
在Visual Studio 2013中,导致这种行为的一种方法是将构建配置设置为Release。将其改回Debug,看看是否有帮助。

enter image description here


这让我的断点起作用了,有进一步的解释吗? - solujic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接