请查看以下程序。
注释显示我使用Visual Studio 2008时的执行顺序,然后启动,并逐步执行程序只按F11(Step Into)调试热键。第一列是我现在实际经历的,第二列是我预期会发生的。
请注意,标有DebuggerNonUserCode属性的类中的方法是步进的,而DebuggerStepThrough的方法则不是。我希望调试器能够跨越这两个。这种情况以前没有发生过。我用这个属性标记了很多我的类,因为我不想在我的类库中调试新功能时躲过所有的噪音,但是现在调试器正好进入它们,好像属性不在那里一样
有人经历过这个吗?我在Visual Studio中的某个地方弄乱了吗?
using System;
using System.Diagnostics;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{ // 1 // 1
new C1().Test(); // 2, 5 // 2
new C2().Test(); // 6 // 3
} // 7 // 4
}
[DebuggerNonUserCode]
public class C1
{
[DebuggerNonUserCode]
public void Test()
{ // 3
} // 4
}
[DebuggerStepThrough]
public class C2
{
[DebuggerStepThrough]
public void Test()
{
}
}
}
答案 0 :(得分:3)
您可能已禁用“仅我的代码”。此设置会忽略DebuggerNonUserCode
,但仍会遵守DebuggerStepThrough
。
要解决此问题,请转到Tools > Options > Debugging > "Enable Just My Code"
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/h5e30exc.aspx
另外值得注意的是,DebuggerStepThrough
仍会在断点处停止。
答案 1 :(得分:0)
当出现异常时,DebuggerNonUserCode属性不会在方法调用中断。代码将在堆栈中的下一个catch中断.1