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

2020-12-01 精緻碼農

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

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

臨時運行C#代碼

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

Console.WriteLine("Welcome!")

回車運行:

再如,你可以直接輸入 Math.PI 等表達式和調用某些方法:

也可以用 VS 的另外一個窗口 View | Other Windows | C# Interactive 來實現個功能。如果只是為了臨時運行 C# 代碼塊,則C# Interactive 會更好用些。兩者使用有些區別,C# Interactive 列印內容需要手動調用 Console.Write 等方法:

調試時調用任何方法

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

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

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

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

使方法執行不影響上下文

默認情況下,在即時窗口運行的代碼,執行完後會對上下文產生副作用(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 後,執行的那句代碼相當於在一個沙箱中運行,和上下文互不幹擾。

訪問特殊變量

Visual Studio 在調試過程中有一些特殊的變量,可以在即時窗口列印它們的值。這些特殊的變量以 $ 作為前綴,通過智能提示可以看到目前有三個這樣的特殊變量:

  • $exception,當前的異常信息。有時候在調試時,你代碼的 try/catch 語句沒有給 catch 語句使用 Exception 參數,則可以在即使窗口使用該特殊變量列印異常信息。
  • $returnvalue,當前語句的返回值。有時候你在代碼中調用了一個方法,但你並沒有用一個變量來存儲這個方法的返回值,而你在調試時又想知道它的返回值。此時你可以在方法執行處添加一個斷點。當運行到該斷點時,按 F10,然後在即時窗口可以通過 $returnvalue 列印該方法的返回值。
  • $user,可以用來獲取當前登錄作業系統的用戶信息和當前運行的進程和線程信息。這個我也沒用過,官方文檔介紹也比較簡單,也不知道這個特殊變量包含哪些成員。直接列印是這樣的:

結束

本文分享的這幾個即時窗口的技巧,在調試時很實用,在工作中我經常使用,希望它也可以幫助你提高開發效率。關於調試,VS 還有其它好用的工具或技巧,比如有一個 Watch(監視)窗口,如果調試時要頻繁查看一個對象的值,使用監視窗口比即時窗口方便很多。

當然,還是希望大家自己去探索更多的技巧,以做到能更高效靈活地使用 VS 這個強大的編輯器。


-

精緻碼農

帶你洞悉編程與架構

點頭像關注,不錯過網海相遇的緣分[比心]

相關焦點

  • 11個強大的Visual Studio調試小技巧
    調試是軟體開發周期中很重要的一部分。它具有挑戰性,同時也很讓人疑惑和煩惱。總的來說,對於稍大一點的程序,調試是不可避免的。最近幾年,調試工具的發展讓很多調試任務變的越來越簡單和省時。這篇文章總結了可能節省你大量時間的11個Visual studio的調試技巧和方法。
  • 12個Visual Studio調試效率技巧
    步過函數(如果當前程序指針指向一個函數)Shift+F11 步出執行的函數暫停執行附加到進程滑鼠懸停時快速查看原始碼中的元素調試窗口:局部變量、監視、即時窗口、模塊、調用堆棧、異常設置許多開發人員使用這個功能強大的工具包來處理調試會話。
  • Visual Studio連接Unity調試代碼
    Visual Studio 2019 寫代碼很方便,但我們處理BUG,修改代碼時,很多Class類沒有出現,這時你需要繼續安裝Visual studio Tools for Unity,然後才能修改Unity裡的代碼。
  • visual studio 2017 for mac怎麼不能安裝了?visual studio 2017...
    近日微軟正式發布了visual studio 2017 for mac正式版,相信很多開發者已經開始上手開發APP了,不過還是有部分用戶不能正常安裝文件,今天西西小編就整理了相關的visual studio 2017 for
  • Visual Studio Code已經是最熱門的開發工具了
    大家可以看一下Erich Gamma大神對於visual studio code的定位,visual studio code之所以能夠成功,跟這個非常精準的定位也有最直接的關係。比編輯器更多、但絕對不做IDE做的事情,相對於編輯器多出的代碼理解、調試功能,正是VSC成功的法寶。
  • Visual Studio Code已經是最熱門的開發工具了
    大家可以看一下Erich Gamma大神對於visual studio code的定位,visual studio code之所以能夠成功,跟這個非常精準的定位也有最直接的關係。比編輯器更多、但絕對不做IDE做的事情,相對於編輯器多出的代碼理解、調試功能,正是VSC成功的法寶。
  • MySql輕鬆入門——使用visual studio 對mysql進行源碼級調試
    講故事上一篇說了mysql的架構圖,很多同學反饋說不過癮,畢竟還是聽我講故事,那這篇就來說一說怎麼利用visual studio 對 mysql進行源碼級調試,畢竟源碼面前,不談隱私,聖人面前,皆為螻蟻。二:工具合集mysql是C++寫的,要想在windows上編譯,還需要下載幾個必備小工具。
  • Visual Studio Code 4 月 Python 擴展更新
    保存更改後,將在相同的調試會話中自動重新加載 Web 伺服器。 其他改進 確保列印圖適合 PDF 頁面 (#9403)  支持使用 「esc」 或 「ctrl+u」 清除交互式窗口輸入框的內容 (#10198)  即使禁用遙測也可以使實驗正常進行 (#10008)  確保在單元執行和單元編輯之間保留單元中的用戶代碼 (#10949) 詳情見更新說明:https://devblogs.microsoft.com
  • visual studio 2015怎麼把英文界面變成中文?
    visual studio 2015怎麼把英文界面變成中文界面?最新的vs2015,剛下載下來時是全英文界面,如何將它改成中文界面呢。下面介紹一下詳細的教程,需要的朋友可以參考下最新的vs2015,剛下載下來時是全英文界面,如何將它改成中文界面呢。
  • 微軟Visual Studio Online 正式上線:很好很強大
    從頁面上直觀地看,VS Online就是一個Web版的VS Code,但這其實只是它的一個前端界面,這個基於網頁瀏覽器的編輯器同樣支持Git存儲庫、擴展和內置的命令行接口,因此開發者可從任何設備編輯、運行和調試應用。
  • Visual Studio 2017 15.7 Preview 1發布(主要亮點內容)
    在Visual Studio 2017 15.7 版中,使用了一些調試窗口異步,它們在工作時將不再阻止 Visual Studio 使用。 此更改允許使得用戶可以繼續與 Visual Studio 進行交互而不會中斷。­  診斷­  快照調試:Visual Studio 快照調試器現在可以從調試 - >附加快照調試器菜單項啟動。
  • visual studio 2005 team suite中文版到
    微軟visual studio 2005 team suite中文版FPP是2005 年發布的一個面向團隊的開發軟體,其提供支持整個軟體開發團隊的工具,讓架構師、開發人員、測試人員、項目管理等人員的工作能夠簡化,同時提高團隊的工作效率,讓開發工作得到有效的監控,是一個非常優秀的高度集成開發環境。目前,商家對其報價為56000元,有需求的朋友不妨考慮下。
  • Visual Studio Code 202008 Python 擴展更新
    主要更新內容包括:支持多個 Python 交互式窗口這是用戶呼聲最高的功能之一。默認情況下,每次在命令面板中運行「Python: Create Python Interactive Window」命令時,它將在 VS Code 中創建一個新的交互式窗口:
  • Visual Studio Code結合GitHub使用
    1、初始化工程目錄,visual studio code 打開工程目錄,cmd命令行下切換到該目錄下,執行命令:git init2、我們登錄GitHub並創建一個BaiDuBBS的Repository,如下圖所示:3、將本地工程與GitHub中的Repository
  • Visual Studio 2010(vs2010)
    界面;9、新增基於.NET平臺的語言 F#;Visual Studio 2010 中文版截圖2具體的安裝過程如下:第一步:雙擊運行visualstudio 2010 安裝程序,打開visual studio 2010 安裝包。
  • Visual Studio 2019 16.6 Preview 2 發布
    這使用戶能夠調試和診斷實時問題,而不會中斷服務。 新的 .NET Async 工具:該版本中帶有一個新的 .NET Async 工具,作為 Performance Profiler 工具套件的一部分。這使了解和優化 .NET 中的 async/await 代碼更加容易。基本上,用戶可以使用此工具來獲取各種任務的確切計時信息,包括它們等待分派到線程的時間、完成任務所需的時間以及任務是否連結在一起。
  • 在Visual Studio 2010中調試DB2
    該調試器「可以在VB與C#應用中實現完全的端到端的SQL存儲過程調試」,但你需要從微軟下載KB2106584補丁以設置斷點。    該Beta版帶有針對DB2LUW、IDS、DB2forz/OS以及DB2forIBMi的標準ADO.NET提供器,此外還包含了一個EntityFramework提供器,它支持資料庫優先的場景以及標準函數。
  • Visual Studio 2010(vs2010)簡介
    Visual Studio 2010 中文版截圖2具體的安裝過程如下:第一步:雙擊運行visual studio 2010 安裝程序,打開visual studio 2010 安裝包。  一、如何使用visual studio 2010創建項目1、首先打開我們下載好的Visual Studio 2010 中文版
  • 技巧:Ubuntu中安裝Visual Studio Code
    ubuntu-make  sudo apt-get update  sudo apt-get install ubuntu-make  安裝Ubuntu Make完後,接著使用下列命令安裝Visual Studio Code:  umake web visual-studio-code
  • 編程|程序調試之調試窗口
    程序寫出來後,總是有這樣那樣的錯誤,調試技巧就顯得很重要了。另外,對於一些理解一些複雜的算法,在關鍵的一些代碼段通過單步調試,便能加深理解。所以說,調試對於編程來說,不但必不可少而且還很重要。調試的一個很重要的方面,就是知道如何在一些調試窗口中查看自己想要了解的內容。