Unity3D Debugger没有使用DebuggerStepThrough属性逐步调试方法

时间:2017-10-03 23:44:17

标签: c# debugging unity3d unity3d-5

Unity3D版本:5.6.1f1个人版。

摘要/ TLDR

如何让Unity3D调试器在调用函数/方法中显示异常?


详细

我试图使用静态类/方法来简化空检查。在这个静态类Ensure中,我有一个静态方法NotNull,其上有System.Diagnostics.DebuggerStepThrough属性。此方法为我执行典型的空检查和异常抛出。根据我的理解,这个属性应该让它看起来像调用方法抛出异常。不是。

统一调试器仍然显示静态类方法中抛出的异常。有没有人知道我错过了什么让调试器工作,如前所述?我已经通过启用了的JMC尝试了此功能。

静态课程&方法

public static class Ensure
{
    [System.Diagnostics.DebuggerStepThrough]
    public static void NotNull(object valueToTest, string valueName)
    {
        if (valueToTest == null)
            throw new System.NullReferenceException(valueName + " is null");
    }
}


调用方法

public class foo
{
    public Timer()
    {
        object obj = null;

        Ensure.NotNull(obj, "obj");
    }
}

1 个答案:

答案 0 :(得分:0)

你让我们感到困惑。

DebuggerStepThrough Attribute指示调试器逐步执行代码而不是单步执行代码。它通常用于像InitializeComponent()这样的方法,因为您很少需要单步执行设计时生成的代码。

我认为您打算写的是属性 抛出异常使得它看起来像调用者方法抛出异常。那是不对的。

以下是着名的QA,basically throwing the exception rather than just a throw loses the stacktrace

这是一个专业提示:异常应该被异常使用。它们是昂贵的。目前,当您不需要时,您正在使用例外。作为布尔函数,NotNull void会更好:

public static bool IsNotNull(object valueToTest)
{
    return (valueToTest != null);
}

这样,如果返回false,则可以在调用者中抛出异常。这就是你可以实现的目标 - 我认为它是 - 你正试图这样做。

更好的方法是使用C#6.0中引入的? null-conditional operator