使用 Code Map 偵錯您的應用程式

Visual Studio 中的 Code Map 有助於避免在大型程式碼基底、不熟悉的程式碼或舊版程式碼當中不知所措。 例如,當您在偵錯時,可能必須查看許多檔案和專案的程式碼。 使用 Code Map 巡覽程式碼片段並了解它們之間的關聯性。 如此一來,您就不必在腦中持續追蹤此程式碼,或繪製個別的圖表。 因此,當您工作中斷時,Code Map 可協助重新整理您正在處理之程式碼的記憶。

Code map - Map relationships in code

綠色箭頭顯示游標出現在編輯器中的位置

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

深入了解使用偵錯工具工具在 Visual Studio 中偵錯

注意

若要建立和編輯 Code Map,您需要 Visual Studio Enterprise 版本。 在 Visual Studio Community 和 Professional 版本中,您可以開啟在 Enterprise 版本中產生的圖表,但是無法編輯。

了解問題

假設您處理的繪圖程式有 Bug。 若要重現 Bug,請在 Visual Studio Ultimate 中開啟方案,並按 F5 開始偵錯。

當您繪製線條並且選取 [復原前一次筆觸] 時,在您繪製下一個線條之前都不會發生任何動作。

Code map - Repro bug

因此您藉由搜尋 Undo 方法開始調查。 您會在PaintCanvas 類別中找到。

Code map - Find code

開始製作程式碼地圖

現在開始對應 undo 方法及其關聯性。 在程式碼編輯器中,您將 undo 方法及其參考的欄位加入至新的 Code Map。 當您建立新的對應時,可能需要一些時間為程式碼編製索引。 這有助於後面的作業更快速執行。

Code map - Show method and related fields

提示

加入對應的最後一個項目會以綠色反白顯示。 綠色箭頭顯示指標在程式碼中的位置。 項目之間的箭頭表示不同的關聯性。 您可以藉由在周圍移動滑鼠和檢查工具提示,來取得對應上之項目的詳細資訊。

Code map - Show tooltips

若要查看每個欄位的程式碼定義,按兩下對應上的欄位,或選取該欄位並按 [F12]。 綠色箭頭會在對應中的項目之間移動。 您在程式碼編輯器中的游標也會自動移動。

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

提示

您也可以在程式碼編輯器中移動游標來移動對應上的綠色箭頭。

了解程式碼之間的關聯性

現在您想知道哪些其他程式碼與 historypaintObjects 欄位互動。 您可以將所有參考這些欄位的方法加入至對應。 您可以從對應或程式碼編輯器執行此步驟。

Code map - Find all references

Open a code map from the code editor

注意

如果您從跨多個應用程式 (如 Windows Phone 或 Windows 市集) 共用的專案中加入項目,則這些項目將一律與目前作用中的應用程式專案一起出現在對應上。 因此,如果您將內容變更為另一個應用程式專案,對應上的內容也會為任何來自共用專案的新增項目進行變更。 您使用對應中項目執行的作業僅適用於共用相同內容的項目。

變更配置以重新排列關聯性流程,使對應更容易閱讀。 您也可以透過拖曳的方式將項目在對應間移動。

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

提示

根據預設,會開啟 [累加配置]。 當您加入新項目時,這會盡可能減少重新排列對應。 若要在每次加入新項目時重新排列整個對應,請關閉 [累加配置]

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

我們來檢查這些方法。 在對應上,按兩下 [PaintCanvas] 方法,或選取此方法並按 [F12]。 您了解這個方法會將 historypaintObjects 建立為空白清單。

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

現在重複相同步驟來檢查 clear 方法定義。 您了解 clear 會對 paintObjectshistory 執行某些工作。 然後呼叫 Repaint 方法。

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

現在檢查 addPaintObject 方法定義。 它也會對 historypaintObjects 執行某些工作。 它也會呼叫 Repaint

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

檢查地圖找出問題

似乎所有修改 historypaintObjects 的方法都會呼叫 Repaint。 但 undo 方法不會呼叫 Repaint,即使 undo 會修改相同的欄位。 因此您認為可以從 Repaint 呼叫 undo 解決這個問題。

Code map - Find missing method call

如果您沒有對應顯示這個遺漏的呼叫,可能難以發現這個問題,特別是在較複雜的程式碼中。

共用您的探索和後續步驟

在您或其他人修正此 Bug 之前,您可以在對應上記下關於問題和修正方式的附註。

Code map - Comment and flag items for followup

例如,您可以使用色彩加入註解至對應和旗標項目。

Code map - Commented and flagged items

如果您有安裝 Microsoft Outlook,您可以用電子郵件將對應傳送給其他人。 您也可以將對應匯出為影像或其他格式。

Code map - Share, export, mail

解決問題並顯示您的作法

若要修正這個 Bug,您必須將對 Repaint 的呼叫加入至 undo

Code map - Add missing method call

若要確認您的修正,先重新啟動偵錯工作階段,然後嘗試重現 Bug。 現在選擇 [復原前一次筆觸] 會如您所預期作用,並確認您已進行正確的修正。

Code map - Confirm code fix

您可以更新對應以顯示您所做的修正。

Code map - Update map with missing method call

您的對應現在會在 [復原] 和 [重繪] 之間顯示連結。

Code map - Updated map with method call

注意

當您更新對應時,可能會看到訊息,指出用於建立對應的程式碼索引已更新。 這表示有人變更程式碼,使您的對應與目前的程式碼不符。 這不會阻止您更新對應,不過,您可能必須重新建立對應以確認其符合程式碼。

現在您已完成調查。 您藉由對應程式碼成功找到問題並且加以解決。 您還可以利用對應巡覽程式碼、記住您所學到的內容,以及顯示您用於解決問題的步驟。