0

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");
    }
}
4

1 回答 1

0

你把我们弄糊涂了。

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

我认为你的意思是抛出异常的属性 使它看起来像调用者方法正在抛出异常。那是不对的。

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

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

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

这样,如果它返回 false,您可以在调用者中抛出异常。这就是您可以实现的方式-我认为是-您正在尝试做的事情。

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

于 2017-10-04T00:09:27.673 回答