簡體   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