1. 程式人生 > 實用技巧 >Visual Studio中,你應該知道的幾個Immediate Window小技巧

Visual Studio中,你應該知道的幾個Immediate Window小技巧

Visual Studio中,你應該知道的幾個Immediate Window小技巧

作為.NET老司機的你,一定在Debug的時候使用過VS的Immediate Window,但是,你是否瞭解它的以下功能呢?如果是.NET新手,莫慌,它非常簡單易用,Debug並動手實踐一下,就可立馬掌握。下面我們一起看看吧:

首先,通過Debug->Windows->Immediate或者快捷鍵Ctrl+D,I開啟Immediate視窗,如下圖所示:

接下來一起看看它的幾個使用方法

1. 訪問非公有成員,執行語句如Linq

這是Immediate Window的基本功能,也是最通常的用法,在debug的時候,我們可以在immediate window裡執行諸如訪問屬性/域,執行Linq等的操作:

2. 訪問異常和返回值

在deug的時候,你有沒有遇到過類似下面的程式碼,第一部分catch住了異常,但啥也沒幹,第二部分程式碼呼叫的函式有返回值,但是並未宣告本地變數去接收返回值。當然這都不是好程式碼,然而專案大了,啥人都有,有時就能碰到這種程式碼,假設你在debug時,想知道異常是啥,GetPersonsAgeUnder18返回了啥,咋辦?答案請看截圖:

    try
    {
        MethodWhichThrowException();
    }
    catch
    {
    }
    GetPersonsAgeUnder18(persons);


3. 通過ID訪問物件

有時候為了追蹤一個物件,我們會給該物件生成一個Id,然後無論在什麼上下文裡,我們都可以通過這個Id來訪問該物件,注意:這個Id並不會阻礙物件的垃圾收集。請看下面的例子:

4. 重新呼叫函式

一個函式呼叫完了,如果想重新進入函式體debug怎麼辦,一種方法是有滑鼠拖過去,另一種就是使用Immediate Window直接呼叫,這裡假設GetPersonsAgeUnder18以及呼叫完了,但是想debug看看它內部的實現,怎麼做?首先,再GetPersonsAgeUnder18中下一個斷點,然後再Immediate Window中呼叫GetPersonsAgeUnder18, VS會自動在斷點處停下,如下所示

5. 消除邊界效應

通過上面的例子,我們可以看出在Immediate Window中呼叫函式,與執行正常程式碼中呼叫並無區別,所以如果函式改變了類的狀態,那麼你在Immediate Window中呼叫該函式,同樣會改變類的狀態,那麼有沒有辦法讓Immediate Window中執行的函式不改變類的狀態呢?方法就是在函式呼叫後面加上nse,即no side effective, 請看下面的例子:

需要說明的是,nse並不是對所有的函式都有效,只是對一些簡單的函式有效。完整程式碼請訪問:https://github.com/DerekLoveCC/Writings/tree/master/Article/VSImmediateWindow/code/ImmediateWindowDemo