Visual Studio 2010调试器跨越方法,不会在断点处停止

时间:2011-01-10 16:39:35

标签: visual-studio-2010 debugging

我的Visual Studio 2010调试器有时会有一种非常奇怪的行为......

有时它不会在断点处停止,但是当它停止时,我想进入一个方法时,调试器就会跳过它。此外,这些过度步骤方法中的断点也会被忽略。

当出现这种奇怪的行为时,它也不会在异常中中断,而只是忽略它们。

我尝试重建我的项目,重置Visual Studio设置并禁用调试器设置,例如“仅在我的代码中断开”,但没有任何效果。

如何解决这个问题?

12 个答案:

答案 0 :(得分:37)

以下是Visual Studio避免单步执行特定方法的原因和解决方法。

  • Just My Code 已启用。在某些情况下,“Just My Code”设置将阻止您进入方法/属性。为避免这种情况,您可以在调试器选项页面中禁用“仅我的代码”(工具 - >选项 - >调试器 - >取消选中“仅我的代码”)
  • 目标方法未加载符号。如果目标方法是另一个DLL的一部分,则可能没有为该DLL加载符号,因此默认情况下Visual Studio将无法进入该步骤。要强制加载符号,请打开模块视图(Debugger - > Windows - > Modules),导航到包含该方法的DLL,右键单击并加载符号。
  • 该方法明确标有调试器属性,例如DebuggerNonUserCode,这会导致调试器跳过该方法。
  • 该方法实际上是属性或运算符,并且您启用了“跳过属性和运算符”设置(这是默认设置)。可以通过调试器选项对话框禁用它。

答案 1 :(得分:4)

在我的案例中,工具中的“跳过属性和操作符” - >选项 - >调试器。只是不得不取消选中,之后一切都很好,我可以介入。

答案 2 :(得分:4)

混淆的另一个原因是使用 yield return 运算符的迭代器方法,因为它们被C#编译器重写,以便踩到它们(F11)是一种" no-op "。

您必须等待迭代才能进入方法的代码。

答案 3 :(得分:3)

我找到了问题的解决方案,这很简单:

在我的解决方案的构建配置中,未检查方法所在的项目的“构建”复选框。我查了一下,现在一切正常。

答案 4 :(得分:2)

要检查的最重要的事情是,当试图在方法中放置一个新的断点时它是否拒绝进入,如果断点被填充红色喜欢其他断点,或半填充或具有特殊的“外观”。如果是,请将鼠标悬停在您创建的断点上,以找出它无法正常工作的原因。

如果断点看起来正常但仍然无法进入该方法,请尝试清除卷影副本缓存:http://weblogs.asp.net/mreynolds/archive/2003/08/11/23576.aspx

要尝试的另一件事是确保您确实使用刚刚重建的DLL,方法是将MessageBox.Show(或类似的东西)添加到您似乎无法停留的方法中,并确保您拿到盒子。

答案 5 :(得分:1)

WAG在这里,但我要说你已经通过BROWSING将你的解决方案中的另一个项目引用到dll(project / bin / debug / mydll.dll)而不是添加“Project Reference”。如果解决方案中有多个项目,请删除对每个项目的所有引用。然后,在“添加引用”对话框中,单击“添加项目引用”选项卡,然后选择要引用的项目。

项目引用始终在新版本上更新。但是,如果您浏览到bin / release并在该目录中添加对dll的引用,当您切换到调试模式并添加代码并尝试调试它时,dll的旧版本将加载到appdomain中VS将无法击中任何断点(您会注意到断点是空心圆圈,工具提示会说明未加载的代码)。

答案 6 :(得分:1)

我挣扎了一段时间。所给出的答案都不适合我。我终于通过以下方式开始工作:

  1. 确保项目处于调试模式(所有项目)
  2. 从Windows转到命令提示符并确保以管理员身份运行
  3. 导航至c:\windows\syswow64\(或gacUtil.exe所在的文件夹)
  4. 运行以下命令(将下面的路径替换为DLL的调试输出版本所在的位置。
  5. gacutil /i "C:\Users\John\Documents\Visual Studio 2008\Projects\Project1\Project1\bin\Debug\MyAppDLL.dll"

    您应该将“程序集成功添加到缓存”

    现在运行您的项目,您应该能够进入DLL代码。

答案 7 :(得分:1)

我刚刚找到问题的另一个原因,并修复了。我正在使用Visual Studio 2010中的C ++创建一个Windows窗体应用程序。我正在使用FreeType库和一些依赖于它的代码,并且由于各种原因,这些代码必须在选择“无公共语言运行时支持”的情况下进行编译(属性 - &gt ;配置属性 - >常规)。我无法在这个非CLR代码中获得断点。

修复是主应用程序必须使用'公共语言运行时支持(/ clr)'编译,而不是'纯MSIL公共语言运行时支持)(/ clr:pure)'。这立即解决了这个问题。我现在可以在非CLR代码中调试并命中断点,包括FreeType C代码。

答案 8 :(得分:0)

我最近经历过同样的经历。不知道我到底做了什么。尝试物理清理您的解决方案,即从解决方案的所有项目中删除所有bin目录。这通常有助于解决很多问题。

答案 9 :(得分:0)

尝试禁用"要求源文件完全匹配"工具中的选项 - > options-> debugging-> general。

答案 10 :(得分:-1)

我的解决方案是创建一个新项目并将所有.vb文件加载到新项目中。解决了我的所有问题。

答案 11 :(得分:-1)

我的问题很简单。我在解决方案中有多个项目,我只需要将我正在使用的项目设置为Set As Startup Project。