了解 Visual Studio 中偵錯工具的生產力提示與訣竅
請閱讀本主題,以了解 Visual Studio 偵錯工具的一些生產力提示與訣竅。 如需偵錯工具的基本功能,請參閱第一次查看偵錯工具。 在本主題中,我們會討論功能導覽中未包含的某些區域。
鍵盤快速鍵
如需最常見的偵錯相關鍵盤快速鍵清單,請參閱鍵盤快速鍵中的偵錯一節。
釘選資料提示
如果您在偵錯時經常將滑鼠停留在資料提示上,您可能會想要釘選變數的資料提示,方便快速存取。 即使在重新啟動之後,變數仍會保持釘選。 若要釘選資料提示,請在將滑鼠停留在資料提示上方時,按一下釘選圖示。 您可以釘選多個變數。
您也可以使用數種方式自訂資料提示,例如將資料提示保持展開 (自黏資料提示),或讓資料提示保持透明。 如需詳細資訊,請參閱在程式碼編輯器的 DataTips 中檢視資料值。
編輯您的程式碼並繼續偵錯 (C#、VB、C++)
在 Visual Studio 支援的大部分語言中,您可以在偵錯工作階段中間編輯程式碼,並繼續偵錯。 若要使用此功能,請在偵錯工具中暫停時,透過游標按一下程式碼、進行編輯,然後按 F5 鍵、F10 鍵或 F11 鍵,以繼續偵錯。
如需使用功能和功能限制的詳細資訊,請參閱編輯後繼續。
編輯 XAML 程式碼並繼續偵錯
若要在偵錯工作階段期間修改 XAML 程式碼,請參閱使用 XAML 熱重新載入撰寫和偵錯執行中的 XAML 程式碼。
針對難以重現的問題進行偵錯
如果在應用程式中重新建立特定狀態有困難或耗時,請考量使用條件中斷點是否能有所幫助。 您可以使用條件中斷點和篩選中斷點,以避免中斷應用程式程式碼,直到應用程式進入所需的狀態 (例如變數儲存不良資料的狀態)。 您可以使用運算式、篩選、叫用次數等項目來設定條件。
建立條件中斷點
以滑鼠右鍵按一下中斷點圖示 (紅色球體),然後選擇 [條件]。
在 [中斷點設定] 視窗中輸入運算式。
如果您對其他類型的條件感興趣,請在 [中斷點設定] 對話方塊中選取 [篩選],而不是 [條件運算式],然後遵循篩選提示。
設定要在偵錯工具中顯示的資料
針對 C#、Visual Basic 和 C++ (僅限 C++/CLI 程式碼),您可以使用 DebuggerDisplay 屬性告訴偵錯工具要顯示哪些資訊。 針對 C++ 程式碼,您可以使用 Natvis 視覺效果來執行相同的作業。
重複連結至相同的應用程式
當您使用連結至程序功能時,您可以選擇 [偵錯] > [重新連結至程序] (Shift+Alt+P),以快速重新連結至先前連結的程序。 當您選擇此命令時,偵錯工具會立即嘗試連結至您連結的最後一個程序,方法是先嘗試比對先前的程序識別碼,如果失敗,則比對先前的程序名稱。 如果找不到相符項目,或如果數個程序具有相同的名稱,則會開啟 [連結至程序] 對話方塊,讓您可以選取正確的程序。
追蹤範圍外物件 (C#、Visual Basic)
使用偵錯工具視窗來檢視變數很容易,例如 [監看式] 視窗。 不過,當變數超出 [監看式] 視窗的範圍時,您可能會注意到變數呈現灰色。在某些應用程式案例中,變數的值可能會變更,即使變數超出範圍,而且您可能想要仔細監看 (例如,變數可能會進行記憶體回收)。 您可以在 [監看式] 視窗中建立變數的物件識別碼,以追蹤變數。
建立物件識別碼
在您要追蹤的變數附近設定中斷點。
啟動偵錯工具 (F5),並在中斷點停止。
在 [區域變數] 視窗中尋找變數 ([偵錯] > [Windows] > [區域變數]),以滑鼠右鍵按一下變數,然後選取 [建立物件識別碼]。
您應該會看到 [區域變數] $ 視窗中顯示 $ 視窗。 此變數是物件識別碼。
以滑鼠右鍵按一下物件識別碼變數,然後選擇 [新增監看式]。
如需詳細資訊,請參閱建立物件識別碼。
檢視函式的傳回值
若要檢視函式的傳回值,請在逐步執行程式碼時查看出現在 [自動] 視窗中的函式。 若要查看函式的傳回值,請確定您感興趣的函式已經執行 (如果您目前在函式呼叫上停止,請按 F10 一次)。 如果視窗關閉,請使用 [偵錯] > [Windows] > [自動] 來開啟 [自動] 視窗。
此外,您可以在 [即時運算] 視窗中輸入函式,以檢視傳回值。 (使用 [偵錯] > [Windows] > [即時運算] 加以開啟。)
您也可以在 [監看式] 和 [即時運算] 視窗中使用虛擬變數,例如 $ReturnValue
。
檢查視覺化檢視中的字串
使用字串時,檢視整個格式化字串會很有幫助。 若要檢視純文字、XML、HTML 或 JSON 字串,請按一下放大鏡圖示 ,同時將滑鼠停留在包含字串值的變數上。
依據字串類型而定,字串視覺化檢視可協助您找出字串是否格式錯誤。 例如,空白 [值] 欄位表示視覺化檢視類型無法辨識字串。 如需詳細資訊,請參閱字串視覺化檢視對話方塊。
針對偵錯工具視窗中顯示的一些其他類型,例如 DataSet 和 DataTable 物件,您也可以開啟內建視覺化檢視。
分析記憶體使用量
您可以擷取和比較堆積的快照集、最佳化記憶體使用量,以及使用記憶體使用量工具來尋找記憶體流失。 如需詳細資訊,請參閱選擇記憶體分析工具。
建立傾印檔案
傾印檔案是快照集,可顯示正在執行的處理序,以及某個時間點為應用程式載入的模組。 含有堆積資訊的傾印也包含該時間點應用程式記憶體的快照集。 傾印大多用來偵錯開發人員無法存取之機器的問題。
如果您需要儲存傾印檔案,請選取 [偵錯] > [另存傾印]。
若要分析傾印檔案,請在 Visual Studio 中選擇 [檔案] > [開啟]。 若要使用傾印檔案開始進行偵錯,請選取 [僅使用受控進行偵測]、[僅使用原生進行偵錯]、[使用混合進行偵錯] 或 [使用受控記憶體進行偵錯]。
如需詳細資訊,請參閱傾印檔案。
中斷已處理例外狀況的程式碼
偵錯工具會中斷未處理例外狀況的程式碼。 不過,已處理例外狀況 (例如在 try/catch
區塊內發生的例外狀況) 也會是錯誤 (bug) 的來源,而且您可能會想要在發生錯誤時進行調查。 您也可以在 [例外狀況設定] 對話方塊中設定選項,將偵錯工具設定為中斷已處理例外狀況的程式碼。 選擇 [偵錯] > [Windows] > [例外狀況設定],以開啟此對話方塊。
[例外狀況設定] 對話方塊可讓您告訴偵錯工具在特定例外狀況時中斷程式碼。 在下圖中,偵錯工具會在每當發生 System.NullReferenceException
時中斷程式碼。 如需詳細資訊,請參閱管理例外狀況。
變更執行流程
當偵錯工具在程式碼行上暫停時,使用滑鼠來抓取左側的黃色箭頭指標。 將黃色箭頭指標移至程式碼執行路徑中的不同點。 然後使用 F5 或步驟命令繼續執行應用程式。
藉由變更執行流程,您可以執行一些作業,例如測試不同的程式碼執行路徑,或重新執行程式碼而不重新啟動偵錯工具。 如需詳細資訊,請參閱移動執行指標。
警告
您通常需要謹慎使用這項功能,您會在工具提示中看到一則警告。 也可能會看到其他警告。 移動指標無法將應用程式還原成先前的應用程式狀態。
偵錯死結和競爭條件
如果您需要偵錯多執行緒應用程式常見的問題類型,通常有助於在偵錯時檢視執行緒的位置。 您可以使用 [在原始程式碼中顯示執行緒] 按鈕,輕鬆地執行此動作。
若要在原始程式碼中顯示執行緒:
在偵錯時,於 [偵錯] 工具列中按一下 [在原始程式碼中顯示執行緒] 按鈕 。
查看來源視窗左邊的裝訂邊。 在此行中,您會看到類似兩條執行緒的執行緒標記圖示 。 執行緒標記表示執行緒會停在這個位置上。
請注意,執行緒標記可能會部分隱藏於中斷點。
將指標移到執行緒標記上。 資料提示方塊就會出現。 資料提示方塊會指出每個已停止的執行緒的名稱和執行緒 ID 編號。
您也可以在平行堆疊視窗中檢視執行緒的位置。
更熟悉偵錯工具連結至您應用程式的方式 (C#、C++、Visual Basic、F#)
為了連結至執行中應用程式,偵錯工具會載入針對您嘗試偵錯之應用程式完全相同組建所產生的符號 (.pdb) 檔案。 在某些情況下,有一些符號檔案的知識會很有幫助。 您可以使用 [模組] 視窗來檢查 Visual Studio 載入符號檔案的方式。
在偵錯時選取 [偵錯] > [Windows] > [模組],來開啟 [模組] 視窗。 [模組] 視窗會顯示偵錯工具正在視為使用者程式碼,或我的程式碼的程式碼模組,以及模組的符號載入狀態。 在大部分情況下,偵錯工具會自動尋找使用者程式碼的符號檔案,但是如果您想要逐步執行 (或偵錯) .NET 程式碼、系統程式碼或第三方程式庫程式碼,則需要額外的步驟才能取得正確的符號檔案。
您可以藉由按一下滑鼠右鍵並選擇 [載入符號],直接從 [模組] 視窗中載入符號資訊。
有時候,應用程式開發人員會提供沒有相符符號檔案的應用程式 (以減少使用量),但是保留組建相符符號檔案的複本,以便稍後對發行的版本進行偵錯。
若要了解偵錯工具如何將程式碼分類為使用者程式碼,請參閱 Just My Code。 若要深入了解符號檔案,請參閱在 Visual Studio 偵錯工具中指定符號 (.pdb) 和來源檔案。
深入了解
如需其他提示和訣竅與更詳細的資訊,請參閱下列部落格文章: