天天看點

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

在 Visual Studio 中有一個視窗叫 Immediate 視窗,中文版本應該叫即時視窗。預設會在你啟動調試時在 VS 編輯器中彈出來。你也可以通過

Debug | Windows | Immediate

或者使用快捷鍵

Ctrl+Alt+I

手動把它調出來。

這個視窗很實用,尤其是在調試的時候。下面總結幾個即時視窗的實用技巧。

1. 臨時運作C#代碼

有時候你可能隻想知道一句C#代碼運作的結果,比如你突然想知道一個空數組調用

Sum()

方法會不會報錯,或者想檢視一下

Math.PI

的值。你不用傻傻地把測試代碼寫在項目裡,設個斷點,然後把項目跑起來檢視。你可以在即時視窗中直接寫C#代碼,然後按回車即可。比如輸入:

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 調試再重新啟動。

另外,在即時視窗可以調用私有方法,也就是說它不受方法的通路權限限制。

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

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 這個強大的編輯器。

作者:精緻碼農-王亮

出處:http://cnblogs.com/willick

聯系:[email protected]

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如有問題或建議,請多多賜教,非常感謝。

VS

繼續閱讀