Visual Studio 調試技巧之即時窗口的妙用

在 Visual Studio 中有一個窗口叫 Immediate 窗口,中文版本應該叫即時窗口。默認會在你啓動調試時在 VS 編輯器中彈出來。你也能夠經過 Debug | Windows | Immediate 或者使用快捷鍵 Ctrl+Alt+I 手動把它調出來。數組

這個窗口很實用,尤爲是在調試的時候。下面總結幾個即時窗口的實用技巧。編輯器

1. 臨時運行C#代碼

有時候你可能只想知道一句C#代碼運行的結果,好比你忽然想知道一個空數組調用Sum()方法會不會報錯,或者想查看一下Math.PI的值。你不用傻傻地把測試代碼寫在項目裏,設個斷點,而後把項目跑起來查看。你能夠在即時窗口中直接寫C#代碼,而後按回車便可。好比輸入:ide

Console.WriteLine("Welcome!")

回車運行:工具

再如,你能夠直接輸入 Math.PI 等表達式和調用某些方法:測試

也能夠用 VS 的另一個窗口 View | Other Windows | C# Interactive 來實現個功能。若是隻是爲了臨時運行 C# 代碼塊,則C# Interactive 會更好用些。二者使用有些區別,C# Interactive 打印內容須要手動調用 Console.Write 等方法:操作系統

2. 調試時調用任何方法

假如你正在調試一個方法,你臨時測試一下這個方法對於不一樣的參數的執行過程或運行結果。好比對於這樣一段代碼:線程

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();
        var result = foo.Add(1, 2, 3);
        Console.WriteLine(result);
    }
}

public class Foo
{
    public int Add(params int[] nums)
    {
        if (nums?.Length < 1)
            return 0;
        var result = 0;
        foreach (var n in nums)
        {
            // ...(其它代碼)
            result += n;
        }
        return result;
    }
}

若想用不一樣的參數來測試foo.Add方法的運行狀況,普通的作法是啓動屢次調試,每次調試都修改一下調用代碼 foo.Add 的參數。使用即時窗口,你能夠在方法調用處打個斷點。而後在即時窗口編寫調用代碼,它會直接使用當前上下文進行調試。不須要中斷 VS 調試再從新啓動。debug

另外,在即時窗口能夠調用私有方法,也就是說它不受方法的訪問權限限制。3d

不過,在即時窗口編寫調用私有方法的代碼時是沒有智能提示的。調試

3. 使方法執行不影響上下文

默認狀況下,在即時窗口運行的代碼,執行完後會對上下文產生反作用(Side Effect)。好比對於這樣一段代碼:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();
        Console.WriteLine();
    }
}

public class Foo
{
    public int Num { get; private set; }
    public int Increase()
    {
        return ++Num;
    }
}

在即時窗口中調用foo.Increase後,Num 的變化以下:

但不少時候咱們只但願即便窗口只是臨時運行一下調試代碼,不想讓它真修改上下文的狀態。咱們只需在表達式後面添加 , nse(no side effect 的簡寫)便可:

加上 nse 後,執行的那句代碼至關於在一個沙箱中運行,和上下文互不干擾。

4. 訪問特殊變量

Visual Studio 在調試過程當中有一些特殊的變量,能夠在即時窗口打印它們的值。這些特殊的變量以 $ 做爲前綴,經過智能提示能夠看到目前有三個這樣的特殊變量:

  • $exception,當前的異常信息。有時候在調試時,你代碼的 try/catch 語句沒有給 catch 語句使用 Exception 參數,則能夠在即便窗口使用該特殊變量打印異常信息。

  • $returnvalue,當前語句的返回值。有時候你在代碼中調用了一個方法,但你並無用一個變量來存儲這個方法的返回值,而你在調試時又想知道它的返回值。此時你能夠在方法執行處添加一個斷點。當運行到該斷點時,按 F10,而後在即時窗口能夠經過 $returnvalue 打印該方法的返回值。

  • $user,能夠用來獲取當前登陸操做系統的用戶信息和當前運行的進程和線程信息。這個我也沒用過,官方文檔介紹也比較簡單,也不知道這個特殊變量包含哪些成員。直接打印是這樣的:

結束

本文分享的這幾個即時窗口的技巧,在調試時很實用,在工做中我常常使用,但願它也能夠幫助你提升開發效率。關於調試,VS 還有其它好用的工具或技巧,好比有一個 Watch(監視)窗口,若是調試時要頻繁查看一個對象的值,使用監視窗口比即時窗口方便不少。

固然,仍是但願你們本身去探索更多的技巧,以作到能更高效靈活地使用 VS 這個強大的編輯器。

相關文章
相關標籤/搜索