繁体   English   中英

Unity3D调试器无法单步调试带有DebuggerStepThrough属性的方法

[英]Unity3D Debugger not stepping through method with DebuggerStepThrough Attribute

Unity3D版本:5.6.1f1个人。

摘要/ TLDR

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


细节

我正在尝试使用静态类/方法使空检查更加容易。 在此静态类中,请Ensure我有一个带有System.Diagnostics.DebuggerStepThrough属性的静态方法NotNull 此方法为我执行典型的null检查和异常抛出。 据我了解,该属性应该使它看起来像调用方法正在引发异常。 不是。

统一调试器仍然显示在静态类的方法中引发的异常。 有谁知道我缺少让调试器像我之前描述的那样工作? 我已经在启用禁用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");
    }
}

您让我们感到困惑。

DebuggerStepThrough属性指示调试器单步执行代码,而不是单步执行代码。 它通常用于InitializeComponent()类的方法中,因为您很少希望单步执行设计时生成的代码。

我认为您要写的是抛出异常 的属性 使它看起来像调用方方法正在抛出异常。 那是不对的。

这是讨论它的著名QA, 基本上抛出异常,而不仅仅是抛出将丢失stacktrace

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

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

这样,如果它返回false,则可以在调用方中引发异常。 那就是您要达到的目的- 我想它是什么。

更好的方法是使用? C#6.0中引入的空条件运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM