在偵錯時建立呼叫堆疊的視覺化對應 (C#、Visual Basic、C++、JavaScript)

在您偵錯時建立 Code Map 以視覺方式追蹤呼叫堆疊。 您可以在地圖上做筆記來追蹤程式碼的執行狀況,以便專注於尋找 Bug。

如需您可搭配 Code Map 使用的命令及動作的詳細資訊,請參閱瀏覽和重新整理 Code Map

重要

您只能在 Visual Studio Enterprise 版本中建立 Code Map。

以下是快速查看 Code Map:

Debugging with call stacks on code maps

對應呼叫堆疊

  1. 在 Visual Studio Enterprise C#、Visual Basic、C++或 JavaScript 專案中,選取 [偵錯>開始偵錯] 或按 F5 開始偵錯。

  2. 您的應用程式進入中斷模式或逐步執行函式之後,請選取 [偵錯>Code Map],或按 Ctrl+Shift+`

    目前的呼叫堆疊會在新的 Code Map 上顯示為橙色:

    See call stack on code map

當您繼續偵錯時,Code Map 會自動更新。 變更對應圖項目或配置不會以任何方式影響程式碼。 請放心地重新命名、移動或移除對應圖上的任何項目。

若要取得項目的詳細資訊,請將滑鼠停留在項目上方,並查看項目的工具提示。 您也可以選取工具列中的 [圖例],以了解每個圖示的意義。

Code Map Legend

注意

Code Map 頂端的訊息圖表可能以舊版程式碼為基礎,表示您上次更新對應之後,程式碼可能已變更。 例如,對應圖上的某個呼叫可能已經不再存在於程式碼中。 關閉訊息,然後先嘗試重建方案後再更新對應圖。

對應外部程式碼

根據預設,只有您的程式碼會出現在對應圖上。 若要查看對應圖上的外部程式碼:

  • 以滑鼠右鍵按一下 [呼叫堆疊] 視窗,然後選取 [顯示外部程式碼]

    Display external code using the Call Stack window

  • 或者,在 Visual Studio 工具 (或 偵錯) >選項>偵錯中取消選取啟用 Just My Code

    Show external code using Options dialog

控制對應圖的配置

變更對應圖的配置完全不會影響程式碼。

若要控制對應圖的配置,請選取對應圖工具列上的 [配置] 功能表。

[配置] 功能表中,您可以:

  • 變更預設的版面配置。
  • 停止自動重新整理對應圖,方法是取消選取 [偵錯時自動配置]
  • 在新增項目時盡可能減少重新整理對應圖,方法是取消選取 [累加配置]

製作程式碼的筆記

您可以加入註解以追蹤程式碼中發生的狀況。

若要新增註解,請在 Code Map 中按一下滑鼠右鍵,然後選取 [編輯>新註解],然後輸入註解。

若要在註解中新增一行,請按 Shift+Enter

Add comment to call stack on code map

以下一個呼叫堆疊更新對應圖

當您將應用程式執行至下一個中斷點或逐步執行函式時,對應會自動新增呼叫堆疊。

Update code map with next call stack

若要停止自動新增呼叫堆疊的對應,請在 Code Map 工具列上選取Show call stack on code map automatically。 對應圖會繼續反白顯示現有的呼叫堆疊。 若要手動將目前的呼叫堆疊新增至對應圖,請按下 Ctrl+Shift+`

將相關程式碼新增至對應圖

既然您已在 C# 或 Visual Basic 中取得對應圖,您可以新增欄位、屬性和其他方法等項目,以追蹤程式碼中發生的情況。

若要移至程式碼中方法的定義,請按兩下對應圖中的方法,或選取它並按 F12,或以滑鼠右鍵按一下它,然後選取 [移至定義]

Go to code definition for a method on code map

若要將您想要追蹤的項目新增至對應圖,請以滑鼠右鍵按一下方法,然後選取您要追蹤的項目。最新加入的項目會以綠色顯示。

Fields related to a method on call stack code map

注意

根據預設,將項目加入對應圖也會加入父群組節點,例如類別、命名空間和組件。 您可以選取 Code Map 工具列上的 [包含父系] 按鈕,或在新增項目時按 Ctrl 來關閉和開啟此功能。

Show fields in a method on call stack code map

繼續建置對應圖來查看更多程式碼。

See methods that use a field: call stack code map

Methods that use a field on call stack code map

使用對應圖尋找錯誤 (bug)

視覺化程式碼可協助您更快速找到 Bug。 例如,假設您正在調查繪圖應用程式中的 Bug。 當您繪製一條線並嘗試復原時,卻沒有發生任何動作,直到您繪製另一條線為止。

因此您在 clearundoRepaint 方法中設定中斷點、開始偵錯,並建置一個如下所示的對應圖:

Add another call stack to code map

您會注意到對應圖上的所有使用者手勢都呼叫 Repaint,除了 undo 之外。 這或許能解釋 undo 未立即執行的原因。

在修正 Bug 並繼續執行應用程式之後,對應圖會加入從 undoRepaint 的新呼叫:

Add new method call to call stack on code map

與其他人共用對應圖

您可以匯出對應圖、使用 Microsoft Outlook 將它傳送給其他人、將其儲存至您的解決方案,並將其簽入版本控制。

若要共用或儲存對應,請在 Code Map 工具列中使用 [共用]

Share call stack code map with others