我的Visual Studio 2010调试器有时会表现得非常奇怪...
有时它不会在断点处停止,但当它停止时,我想进入一个方法,调试器却只是跳过它。此外,在那些被跳过的方法中设置的断点也被忽略了。
当出现这种奇怪的行为时,它也不会在异常处中断,而只是忽略它们。
我已经尝试重新构建项目,重置Visual Studio设置,并禁用了调试器设置,如“仅在我的代码中中断”,但没有任何效果。
我该如何解决这个问题?
我的Visual Studio 2010调试器有时会表现得非常奇怪...
有时它不会在断点处停止,但当它停止时,我想进入一个方法,调试器却只是跳过它。此外,在那些被跳过的方法中设置的断点也被忽略了。
当出现这种奇怪的行为时,它也不会在异常处中断,而只是忽略它们。
我已经尝试重新构建项目,重置Visual Studio设置,并禁用了调试器设置,如“仅在我的代码中中断”,但没有任何效果。
我该如何解决这个问题?
以下是一些可能导致Visual Studio无法进入特定方法的原因和解决方法:
DebuggerNonUserCode
,这会导致调试器跳过该方法。另一个令人困惑的问题是使用yield return操作符的迭代器方法,因为它们被C#编译器重新编写成一种步进(F11)时相当于"无操作"的方式。
您必须等待迭代发生才能中断该方法的代码。
我曾经为此苦苦挣扎。所给出的答案都对我没有用。最终,我通过以下步骤使它工作:
c:\windows\syswow64\
(或包含 gacUtil.exe
的文件夹)gacutil /i "C:\Users\John\Documents\Visual Studio 2008\Projects\Project1\Project1\bin\Debug\MyAppDLL.dll"
您应该会得到“程序集已成功添加到缓存”
现在运行您的项目,您应该能够进入 DLL 代码。
我刚刚发现了问题的另一个原因和解决方法。我正在使用Visual Studio 2010中的C++创建Windows Forms应用程序。我正在使用FreeType库和一些依赖于它的代码,由于各种原因,这些代码必须选择“不支持公共语言运行时”进行编译(属性 -> 配置属性 -> 常规)。我无法在这个非CLR代码中设置断点。
解决方法是主应用程序必须使用“公共语言运行时支持(/clr)”进行编译,而不是“纯MSIL公共语言运行时支持(/clr:pure)”。这立即解决了问题。我现在可以调试并命中非CLR代码中的断点,包括FreeType C代码。
我猜测你在解决方案中通过浏览dll文件(project/bin/debug/mydll.dll)来引用另一个项目,而不是添加“项目引用”。如果你的解决方案中有多个项目,请删除所有对每个项目的引用。然后,在“添加引用”对话框中,点击“添加项目引用”选项卡,并选择要引用的项目。
项目引用总是在新构建时更新。但是,如果你浏览到bin/release并添加对该目录中dll文件的引用,当你切换到调试模式并添加代码并尝试调试它时,旧版本的发布dll将加载到应用程序域中,VS将无法命中任何断点(你会注意到断点是空圆圈,工具提示将显示有关未加载代码的信息)。
我最近也遇到了同样的问题。虽然不确定自己具体做了什么。尝试“物理”清理你的解决方案,即从解决方案的所有项目中删除所有 bin 目录。这通常有助于解决许多问题。