使用程式碼映射來偵錯您的應用程式

Visual Studio 中的程式碼對應 可協助您避免在大型程式碼庫、不熟悉的程式碼或舊版程式碼中迷失方向。 例如,當您偵錯時,您可能必須查看許多檔案和專案的程式碼。 使用程式碼映射來瀏覽程式碼片段並了解它們之間的關係。 這樣,您就不必在腦海中追蹤此程式碼,或繪製單獨的圖表。 因此,當您的工作中斷時,程式碼對應有助於刷新您對正在處理的程式碼的記憶。

程式碼映射 - 程式碼中的關聯映射

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

如需瞭解您在使用程式碼對應時可使用的命令和動作的詳細資料,請參閱瀏覽和重新排列程式碼對應。

深入瞭解如何使用 偵錯工具在 Visual Studio 中偵錯。

備註

若要建立和編輯程式碼對應,您需要 Visual Studio 企業版。 在 Visual Studio Community 和 Professional 版本中,您可以開啟在 Enterprise Edition 中產生的圖表,但無法編輯它們。

了解問題

假設您正在處理的繪圖程式中存在錯誤。 若要重現錯誤,請在 Visual Studio 中開啟解決方案,然後按 F5 開始偵錯。

當您繪製一條線並選擇「 復原我的最後一筆」時,在您繪製下一條線之前不會發生任何動作。

程式碼對應 - 重現錯誤

因此,您通過搜索 Undo 方法開始調查。 你在 PaintCanvas 類別中找到它。

程式碼地圖 - 查找程式碼

開始映射程式碼

現在開始映射 undo 方法及其關係。 從程式碼編輯器中,您可以將undo方法及其參考的欄位新增至新的程式碼對應。 當您建立新地圖時,可能需要一些時間來建立程式碼的索引。 這有助於以後的操作運行得更快。

程式碼對映 - 顯示方法和相關欄位

小提示

綠色醒目提示顯示新增至地圖的最後項目。 綠色箭頭顯示游標在程式碼中的位置。 項目之間的箭頭代表不同的關聯性。 您可以將滑鼠移到地圖上項目上並檢查其工具提示,以取得有關地圖上項目的詳細資訊。

程式碼地圖 - 顯示工具提示

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

已選取歷程欄位的程式碼映射視窗的螢幕擷取畫面,以及程式碼編輯器視窗,其中所有歷程實例均已醒目提示。

程式碼對應圖視窗的螢幕擷取畫面,選取了 paintObjects 欄位,以及程式碼編輯器視窗,醒目提示所有 paintObjects 的實例。

小提示

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

了解程式碼片段之間的關聯性

現在您想知道哪些其他程式碼與 history 和 paintObjects 欄位互動。 您可以將參照這些欄位的所有方法新增至映射。 您可以從地圖或程式碼編輯器執行此操作。

程式碼映射 - 尋找所有參照

從程式碼編輯器開啟程式碼地圖

備註

如果您從跨多個應用程式共用的專案新增項目,例如 Windows Phone 或 Windows 市集,則這些項目一律會與地圖上目前作用中的應用程式專案一起顯示。 因此,如果您將內容變更為另一個應用程式專案,則從共用專案中新增的任何項目,地圖上的內容也會變更。 您對地圖上的項目執行的作業僅適用於共用相同內容的項目。

變更版面配置以重新排列關係流程,並使地圖更易於閱讀。 您也可以透過拖曳在地圖上移動項目。

開啟 [版面配置] 功能表並選取 [向左至 Rgiht] 命令的程式碼對應視窗的螢幕擷取畫面。

小提示

依預設,「 增量版面配置」 會開啟。 當您添加新項目時,這會盡可能少地重新排列地圖。 若要在每次新增項目時重新排列整個地圖,請關閉「增量版面配置」。

程式碼地圖視窗的截圖,其中欄位之間的關係箭頭從左向右指示。

讓我們來看看這些方法。 在地圖上,按兩下 PaintCanvas 方法,或選取此方法並按 F12。 您會瞭解此方法會建立 history 和 paintObjects 作為空清單。

現在重複相同的步驟來檢查 clear 方法定義。 您了解到clear與paintObjects和history執行一些任務。 然後它會呼叫該 Repaint 方法。

程式碼對應視窗的螢幕擷取畫面顯示了已選取的 Clear 方法,以及顯示 Clear 方法程式碼的程式碼片段影像。

現在檢查 addPaintObject 方法定義。 它還使用history和paintObjects來執行一些任務。 它也會呼叫 Repaint。

顯示 addPaintObject 方法被選取的程式碼地圖視窗的截圖,以及展現 addPaintObject 方法程式碼的程式碼片段影像。

透過檢查地圖找出問題

似乎所有修改 history 和 paintObjects 的方法都呼叫 Repaint。 然而,該 undo 方法不會調用 Repaint,即使 undo 修改了相同的字段。 所以你認為可以透過從Repaint呼叫undo來解決這個問題。

程式碼映射 - 查找缺失的方法呼叫

如果您沒有地圖來顯示這個丟失的電話,則可能更難找到這個問題,尤其是對於更複雜的代碼。

分享您的發現和後續步驟

在您或其他人修復此錯誤之前,您可以在地圖上記錄該問題以及如何修復它。

程式碼映射圖 - 註解和標記項目以便後續處理

例如,您可以向地圖添加註釋並使用顏色標記項目。

程式碼對應 - 已註解和已標記的項目

如果您已安裝 Microsoft Outlook,則可以透過電子郵件將地圖傳送給其他人。 您也可以將地圖匯出為影像或其他格式。

程式碼圖 - 共用、匯出、郵件

修正問題並顯示您所做的工作

若要修正此錯誤,請將Repaint的呼叫新增至undo。

代碼映射 - 新增遺漏的方法呼叫

若要確認修正,請重新啟動偵錯工作階段,並嘗試重現錯誤。 現在選擇「撤消我的最後一個筆劃」會如您期望地運作,確認您做出了正確的修正。

程式碼映射 - 確認程式碼修正

您可以更新地圖以顯示您所做的修正。

程式碼映射 - 更新映射以添加缺少的方法呼叫

您的地圖現在顯示 撤消 和 重繪之間的連結。

程式碼對應 - 更新地圖包含方法呼叫

備註

當您更新地圖時,您可能會看到一則訊息,指出用於建立地圖的程式碼索引已更新。 這意味著有人更改了代碼,導致您的地圖與當前代碼不匹配。 這不會阻止您更新地圖,但您可能需要重新建立地圖以確認它符合程式碼。

現在你已經完成了調查。 您成功地將程式碼映射對應後,找到了問題並加以修正。 您還有一張地圖,可幫助您瀏覽程式碼、記住您學到的內容,並顯示您為解決問題所採取的步驟。