我的Visual Studio 2010调试器有时会有一种非常奇怪的行为......
有时它不会在断点处停止,但是当它停止时,我想进入一个方法时,调试器就会跳过它。此外,这些过度步骤方法中的断点也会被忽略。
当出现这种奇怪的行为时,它也不会在异常中中断,而只是忽略它们。
我尝试重建我的项目,重置Visual Studio设置并禁用调试器设置,例如“仅在我的代码中断开”,但没有任何效果。
如何解决这个问题?
答案 0 :(得分:37)
以下是Visual Studio避免单步执行特定方法的原因和解决方法。
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)
我挣扎了一段时间。所给出的答案都不适合我。我终于通过以下方式开始工作:
c:\windows\syswow64\
(或gacUtil.exe
所在的文件夹) 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。