共用方式為


在 Visual Studio 偵錯時,將方法映射至呼叫堆疊

建立程式碼地圖,以便在除錯時視覺化追蹤呼叫堆疊。 您可以在地圖上做筆記以追蹤程式碼正在做什麼,以便您可以專注於尋找錯誤。

在程式碼對應上使用呼叫堆疊進行偵錯

您將需要:

對應呼叫堆疊

  1. 開始偵錯。 (鍵盤: F5

  2. 在您的應用程式進入中斷模式或您逐步執行函式之後,請選擇[Code Map]。 (鍵盤: Ctrl + Shift + `

    選擇 [程式碼對應圖] 以開始對應呼叫堆疊

    目前的呼叫堆疊會在新的程式碼對應上顯示橘色:

    請參閱程式碼映射上的呼叫堆疊

    當您繼續偵錯時,地圖會自動更新。 請參閱 使用下一個呼叫堆疊更新地圖

記下程式碼

新增註解以追蹤程式碼中發生的情況。 若要在註解中新增一行,請按 Shift + Return

將註解新增至程式碼對應上的呼叫堆疊

使用下一個呼叫堆疊更新地圖

將應用程式執行至下一個中斷點,或進入函式。 地圖會新增一個呼叫堆疊。

使用下一個呼叫堆疊更新程式碼對應

將相關程式碼新增至地圖

現在你有一張地圖 - 下一步是什麼? 如果您使用 C# 或 Visual Basic,請新增項目,例如欄位、屬性和其他方法,以追蹤程式碼中發生的情況。

雙擊函式以查看程式碼,或使用右鍵功能表。 (鍵盤:在地圖上選擇方法,按 F12

移至程式碼地圖上的方法定義

在地圖上新增您要追蹤的項目。

在呼叫堆疊程式碼對應上顯示方法中的欄位

備註

依預設,將項目新增至映射時,也會新增父群組節點,例如類別、命名空間和組件。 雖然這很有用,但您可以使用地圖工具列上的 「包括父項 」按鈕關閉此功能,或在新增項目時按 CTRL ,以保持地圖簡單。

與呼叫堆疊程式碼對應上方法相關的欄位

在這裡您可以輕鬆查看哪些方法使用相同的欄位。 最近新增的項目會顯示為綠色。

繼續建置地圖以查看更多程式碼。

參閱方法使用之欄位:呼叫堆疊程式碼映射

使用呼叫堆疊程式碼對應上欄位的方法

使用地圖尋找錯誤

視覺化程式碼可以幫助您更快地找到錯誤。 例如,假設您正在調查繪圖程式中的錯誤。 當您畫一條線並嘗試撤消它時,在您畫另一條線之前什麼也沒發生。

因此,您在 clearundoRepaint 方法中設定中斷點,開始偵錯,然後建構如下的對映:

將另一個呼叫堆疊新增到程式碼對應中

您會注意到地圖上的所有使用者手勢都會呼叫 Repaint,但不會呼叫 undo。 這或許可以解釋為什麼 undo 不能立即起作用。

修正錯誤並繼續執行程式後,映射會將新呼叫從undo新增至Repaint

將新的方法呼叫新增至程式碼映射上的呼叫堆疊

問與答

  • 並非所有通話都會顯示在地圖上。 Why?

    根據預設,地圖上只會顯示您自己的程式碼。 若要查看外部程式碼,請在 [呼叫堆疊] 視窗中將其開啟:

    使用 [呼叫堆疊] 視窗顯示外部程式碼

    或關閉 Visual Studio 偵錯選項中的 [只啟用我的程式碼]

    使用「選項」對話框顯示外部程式碼

  • 更改地圖會影響程式碼嗎?

    變更地圖不會以任何方式影響程式碼。 請隨意重命名、移動或刪除地圖上的任何內容。

  • 此訊息是什麼意思:「圖表可能基於舊版本的程式碼」?

    程式碼可能在您上次更新地圖後已變更。 例如,地圖上的呼叫可能不再存在於程式碼中。 關閉訊息,然後嘗試重建解決方案,然後再再次更新地圖。

  • 如何控制地圖的佈局?

    開啟地圖工具列上的 「版面配置」 功能表:

    • 變更預設版面配置。

    • 若要停止自動重新排列地圖,請關閉偵錯時自動排版

    • 若要在新增項目時盡可能少地重新排列地圖,請關閉「增量版面配置」。

  • 我可以與其他人共享地圖嗎?

    您可以匯出地圖,如果您有 Microsoft Outlook,則將其傳送給其他人,或將它儲存至您的解決方案,以便將其簽入原始檔控制。

    與他人共用呼叫堆疊程式碼映射

  • 如何阻止地圖自動新增呼叫堆疊?

    選擇 [按鈕] - 在地圖工具列上 自動顯示程式碼地圖上的呼叫堆疊 。 若要手動將目前的呼叫堆疊新增至映射,請按 Ctrl + Shift + `

    當您偵錯時,地圖會繼續突出顯示地圖上的現有呼叫堆疊。

  • 項目圖示和箭頭是什麼意思?

    若要取得項目的詳細資訊,請將滑鼠指標移到該項目上,然後查看項目的工具提示。 您也可以查看 圖例 以了解每個圖示的含義。

    呼叫堆疊程式碼對應上的圖示是什麼意思?

    See:

  • 映射呼叫堆疊

  • 記下程式碼

  • 使用下一個呼叫堆疊更新映射

  • 將相關程式碼新增至地圖

  • 使用地圖尋找錯誤