我设法打破了DebuggerNonUserCodeAttribute,有人经历过这个吗?

时间:2009-09-27 19:41:18

标签: .net visual-studio visual-studio-2008

请查看以下程序。

注释显示我使用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()
        {
        }
    }
}

2 个答案:

答案 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

DebuggerNonUserCode