我如何很好地包装Debugger.Break?

时间:2014-11-28 14:55:22

标签: c# .net debugging

Debug.Assert显示了一个令人困惑的消息框,但如果conditionfalse,我希望它能够中断。

以下作品,但写作很乏味:

#if DEBUG
    if (!condition) Debugger.Break()
#endif

所以我写了以下函数:

public class Util
{
    [Conditional("DEBUG")]
    public static void Assert(bool condition)
    {
        if (!condition) Debugger.Break();
    }
}

它有效,但它在功能中断,而不是在其呼叫站点。如何使Assert函数的行为类似于它包含的Break函数?

1 个答案:

答案 0 :(得分:4)

Matzecomment是正确的。使用DebuggerStepThrough属性设置Assert方法会设置Assert方法调用的断点。

测试程序:

[DebuggerStepThrough]
public static void Assert(bool condition)
{
    if (!condition) Debugger.Break();
}

static void Main(string[] args)
{
    Assert(false); // <-- break point here

    Console.ReadKey();
}

请注意,您必须启用Just my code。转到Options -> Debugging -> Enable Just My Code