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