常見問題集:偵錯工具功能尋找工具

本文件說明在 Visual Studio 中偵錯功能的常見問題。 還會將偵錯工作或問題對應至 Visual Studio 偵錯工具中的相關功能。 這些連結涵蓋工作或問題,例如偵錯多執行緒應用程式、程式碼瀏覽、記憶體流失、檢查變數、使用中斷點、外部程式碼偵錯等等。 如果您需要偵錯工具功能的概觀,請改為參閱偵錯工具簡介

中斷點

  • 如何暫停執行中的程式碼,以檢查可能包含 Bug 的程式碼?

    設定中斷點。 如需詳細資訊,請參閱使用中斷點

  • 變數是否有非預期的值。 或者,我想要在應用程式達到特定狀態時檢查應用程式嗎?

    請嘗試條件式中斷點,以控制使用條件式邏輯啟用中斷點的位置和時機。 以滑鼠右鍵按一下中斷點來新增條件。 當變數等於非預期的值時,請將條件設定為 true。

    如需詳細資訊,請參閱中斷點條件

  • 如何在不需修改或停止程式碼的情況下,在可設定的條件下將資訊記錄至 [輸出] 視窗?

    追蹤點可讓您在不需修改或停止程式碼的情況下,在可設定的條件下將資訊記錄至 [輸出] 視窗。

  • 如何知道變數的值何時變更?

    對於 C++,請設定資料中斷點

    對於使用 .NET Core 3 的應用程式,您也可以設定資料中斷點

    此外,僅適用於 C# 和 F#,您可以使用條件式中斷點追蹤物件識別碼

  • 如何只在叫用另一個中斷點時中斷執行?

    設定相依中斷點,該中斷點只有在先叫用另一個中斷點時才會中斷執行。 如需詳細資訊,請參閱相依中斷點

  • 只能叫用中斷點一次嗎?

    設定暫時中斷點,讓您只中斷程式碼一次。 如需詳細資訊,請參閱暫時中斷點

  • 是否可以在特定反覆項目暫停迴圈內的程式碼?

    設定相依中斷點,該中斷點只有在先叫用另一個中斷點時才會中斷執行。 如需詳細資訊,請參閱叫用次數

  • 當我知道函式名稱而不知道函式位置時,如何在函式開頭暫停程式碼?

    您可以使用函式中斷點來執行此動作。 如需詳細資訊,請參閱設定函式中斷點

  • 如何在多個具有相同名稱的函式開頭暫停程式碼?

    當您有多個具有相同名稱的函式 (多載函式或不同專案中的函式),您可以使用函式中斷點

  • 管理及追蹤中斷點

    使用 [中斷點] 視窗。 如需詳細資訊,請參閱管理中斷點

  • 擲回特定已處理或未處理的例外狀況時,暫停程式碼並進行偵錯

    雖然例外狀況協助程式會顯示發生錯誤的位置,但如果您想要暫停並偵錯特定錯誤,則可以告知偵錯工具在擲回例外狀況時中斷

  • 從呼叫堆疊設定中斷點

    如果您想要在檢查 [呼叫堆疊] 視窗中的執行流程或檢視函式時暫停和偵錯程式碼,請參閱在 [呼叫堆疊] 視窗中設定中斷點

  • 在特定組譯碼指令中暫停程式碼

    您可以從 [反組譯碼] 視窗設定中斷點來執行此動作。

巡覽程式碼

  • 如何了解偵錯時逐步執行程式碼的命令?

    如需詳細資訊,請參閱使用偵錯工具瀏覽程式碼

  • 是否可以在跳過中斷點時將程式碼執行至特定行,而不移除或停用中斷點?

    針對這些案例可以使用 [強制執行至資料指標]。 您可以保留中斷點,偵錯工具會跳過中斷點,直到其到達具有資料指標的程式碼為止。 該工具也會跳過任何可能發生的第一次例外狀況中斷狀況。 如需詳細資訊,請參閱使用偵錯工具瀏覽程式碼

  • 如果程式碼呼叫不同的方法,我可以逐步執行特定方法嗎?

    以滑鼠右鍵按一下程式碼,以顯示可讓您選取 [逐步執行特定] 的操作功能表。 這會顯示您可以逐步執行的所有方法清單。 您現在可以選取感興趣的方法。

檢查和視覺化資料

  • 如何在執行應用程式時檢查變數的值?

    使用資料提示將滑鼠停留在變數上方,或在 [自動變數] 和 [區域變數] 視窗中檢查變數

  • 是否可以觀察特定變數的變更值?

    對變數設定監看式。 如需詳細資訊,請參閱對變數設定監看式

  • 如何檢視太長而無法用於偵錯工具視窗的字串?

    [字串視覺化檢視] 會顯示太長而無法用於資料提示或偵錯工具視窗的字串。 它也可以協助您識別格式錯誤的字串。
    Visual Studio 中的內建字串視覺化檢視包含 Text、XML、HTML 和 JSON 選項。

  • 如何檢視大型集合物件?

    [DataSet 視覺化檢視] 可讓您檢視 DataSet、DataTable、DataView 或 DataViewManager 的內容。 [IEnumerable 視覺化檢視] 可讓您檢視像是陣列、清單等物件。如需詳細資訊,請參閱表格式視覺化檢視

偵錯已執行的應用程式

  • 如何偵錯本機或遠端電腦上執行的應用程式、同時偵錯多個處理序、偵錯未在 Visual Studio 中建立的應用程式,或偵錯未從 Visual Studio 啟動的任何應用程式?

    請參閱附加至執行中的處理序

  • 如何重複附加至同一個應用程式?

    您可以使用 [重新附加至處理序] (Shift+Alt+P),輕鬆地執行一鍵啟動應用程式偵錯的功能,而不需要每次都透過 [附加至處理序] 對話方塊執行。 請參閱重新附加至處理序

對多執行緒應用程式進行偵錯

  • 如何偵錯多執行緒應用程式? 或者,應用程式是否處於無回應狀態?

    請參閱平行堆疊視窗進一步進行疑難排解

  • 如何檢視函式的呼叫順序?

    請參閱如何檢視呼叫堆疊

分析記憶體

  • 應用程式是否有記憶體流失?

    擷取快照集並使用記憶體工具加以開啟,以進一步進行疑難排解。 請參閱測量記憶體使用量

  • 如何分析原生或受控應用程式的記憶體使用量?

    透過即時偵錯、堆積傾印或效能分析工具,使用 Visual Studio 記憶體工具。
    請參閱選擇記憶體分析工具

  • 如何在不附加偵錯工具的情況下,分析原生或受控應用程式的記憶體使用量? 使用已啟用記憶體使用量工具的 Visual Studio 效能分析工具。
    請參閱分析記憶體使用量

  • 是否可以比較兩個時間點之間的記憶體使用量?

    比較記憶體工具中的快照集,或使用差異功能比較兩個堆積傾印。 請參閱分析記憶體使用量

外部程式碼偵錯

  • 偵錯時只能看到使用者程式碼嗎?

    Just My Code 是 Visual Studio 偵錯功能,其會自動逐步執行對系統、架構和其他非使用者程式碼的呼叫。 在 [呼叫堆疊] 視窗中,Just My Code 會將這些呼叫摺疊成 [外部程式碼] 框架。 請參閱僅使用 Just My Code 偵錯使用者程式碼

  • 如何檢視或偵錯程式執行的原始組譯碼指令?

    使用 [偵錯 > Windows > 反組譯碼] 中的 [反組譯碼] 視窗。 您可以一次逐步執行一個指令,甚至設定個別組譯碼指令的中斷點。

  • 是否可以查看 .NET 程式庫的原始程式碼?

    從 [偵錯 > 選項 > 符號] 啟用 Microsoft 符號伺服器,以下載 .NET 程式庫的符號和來源。 請參閱指定符號

  • 如何從特定或共用位置或伺服器載入 PDB?

    從 [偵錯 > 選項 > 符號] 設定符號伺服器。 請參閱指定符號

  • 如何永遠不載入特定的 PDB? 或者,如何一律載入一個 PDB?

    在 [偵錯 > 選項 > 符號] 中設定包含和排除清單。
    請參閱指定符號

設定偵錯

  • 如何設定偵錯工具設定?

    若要設定偵錯工具選項和偵錯工具專案設定,請參閱偵錯工具設定和準備

  • 如何自訂偵錯工具中顯示的資訊?

    您可能想要將物件類型以外的資訊顯示為不同偵錯工具視窗中的值。 對於 C#、Visual Basic、F# 及 C++/CLI 程式碼,請使用 DebuggerDisplay 屬性。 如需更進階的選項,您也可以建立自訂視覺化檢視來自訂 UI。 對於原生 C++,請使用 NatVis 架構

其他工作

  • 是否需要儲存傾印?

    在偵錯期間於錯誤或中斷點停止時,請選取 [偵錯 > 另存傾印]。 請參閱傾印檔案

  • 如何分析傾印檔案?

    在 Visual Studio 中,選擇 [檔案 > 開啟] 來開啟傾印。 若要開始進行偵錯,請選取 [僅使用受控進行偵測]、[僅使用原生進行偵錯]、[使用混合進行偵錯] 或 [使用受控記憶體進行偵錯]。 請參閱傾印檔案

  • 是否可以在偵錯工作階段期間編輯程式碼?

    使用編輯後繼續。 對於 XAML,請使用 XAML 熱重新載入

  • 如何在遠端電腦上進行偵錯?

    請參閱遠端偵錯

  • 如何修正效能問題?

    請參閱初步認識分析工具

  • 如何修正例外狀況?

    請參閱修正例外狀況