對應 Code Map 上的特定相依性
當您想要了解程式碼中的特定相依性時,請建立 Code Map 來將其視覺化 (僅限 Visual Studio Ultimate)。 然後,您可以使用出現在您程式碼旁邊的對應來導覽這些關聯性。 這可協助您在工作時追蹤程式碼中的位置。
綠色箭頭顯示游標出現在編輯器中的位置。 您可以在對應上加註解,就和在紙張上加註一樣。
Code Map 有助於避免在大型程式碼基底、不熟悉的程式碼或舊版程式碼當中不知所措。 例如,當您在偵錯時,可能必須查看許多檔案和專案的程式碼。 Code Map 可協助您瀏覽這些程式碼並查看它們之間的關聯性。 您不需要完全記住此程式碼、追蹤檔案或繪製個別的圖表。 如果您必須中斷工作,Code Map 可協助重新整理您正在處理之程式碼的記憶體。
建立或開啟 Code Map
若要建立 Code Map,您需要有 Visual Studio Ultimate 2013,以及具有 Visual C# .NET、Visual Basic .NET、X++ for Microsoft Dynamics AX 或 C++ 程式碼 (部分支援) 的方案。 若要取得色彩編碼關聯性,您需要有 Visual Studio 2013 Update 3。 若要對應 X++ 程式碼以及跨多個應用程式共用的程式碼,您需要有 Visual Studio 2013 Update 2 (含) 以後版本。
您可以透過下列方式建立 Code Map:
在 [方案總管] 中,以滑鼠右鍵按一下原始程式檔或二進位檔等項目,然後選取 [在 Code Map 上顯示]。 這會建立選取項目的 Code Map。
將原始程式檔或二進位檔等項目從 [方案總管] 拖曳到已開啟的 Code Map 上,以包含和 (或) 反白顯示對應中的項目。
以滑鼠右鍵按一下編輯器視窗的空白區域,然後選取 [在 Code Map 上顯示]。 這會建立新的空白 Code Map。
以滑鼠右鍵按一下編輯器視窗中的物件或類別,然後選取 [在 Code Map 上顯示]。 這會建立選取項目的 Code Map。 您也可以使用這個功能表來尋找所有參考,或在 Code Map 上顯示相關項目。
暫停應用程式時,按一下 [偵錯] 功能表上的 [Code Map] 按鈕。
從開啟的 IntelliTrace 檔案,或從 [架構] 功能表的相依性圖形。
您可以使用 Visual Studio Premium 2013 或 Visual Studio Professional 2013,來檢視、進行有限的編輯,以及巡覽 Code Map。
在您與使用 Premium 或 Professional 的其他人共用對應時,請確定對應中的所有項目都是可見的,例如隱藏項目、展開的群組和跨群組連結。
觀看 Code Map 實際操作:使用 Code Map 了解複雜的程式碼 (Channel 9)
了解問題
假設您處理的繪圖程式有 Bug。 若要重現 Bug,您可以在 Visual Studio Ultimate 中開啟方案並按 F5 開始偵錯。
當您繪製線條並且選取 [復原前一次筆觸] 時,在您繪製下一個線條之前都不會發生任何動作。
因此您藉由搜尋 Undo 方法開始調查。 您會在PaintCanvas 類別中找到。
開始製作程式碼地圖
現在您開始對應 undo 方法及其關聯性。 在程式碼編輯器中,您將 undo 方法及其參考的欄位加入至新的 Code Map。 當您建立新的對應時,可能需要一些時間為程式碼編製索引。 這有助於後面的作業更快速執行。
提示
加入對應的最後一個項目會以綠色反白顯示。綠色箭頭顯示指標在程式碼中的位置。項目之間的箭頭表示不同的關聯性。您可以藉由檢查對應項目的工具提示取得其相關詳細資訊。
從地圖中巡覽和檢查程式碼
若要查看每個欄位的程式碼定義,按兩下對應上的欄位,或選擇欄位並按 F12。 綠色箭頭會在對應中的項目之間移動。 您在程式碼編輯器中的游標也會自動移動。
提示
您也可以在程式碼編輯器中移動游標來移動對應上的綠色箭頭。
了解程式碼之間的關聯性
現在您想知道哪些其他程式碼與 history 及 paintObjects 欄位互動。 您可以將所有參考這些欄位的方法加入至對應。 您可以從對應或程式碼執行此步驟。
變更配置以重新排列關聯性流程,使對應更容易閱讀。 您也可以透過拖曳的方式將項目在對應間移動。
提示
根據預設,會開啟 [累加配置]。當您加入新項目時,這會盡可能減少重新排列對應。若要在每次加入新項目時重新排列整個對應,請關閉 [累加配置]。
我們來檢查這些方法。 在對應上,按兩下 [PaintCanvas] 方法,或選擇此方法並按下 F12。 您了解這個方法會將 history 和 paintObjects 建立為空白清單。
現在重複相同步驟來檢查 clear 方法定義。 您了解 clear 會對 paintObjects 和 history 執行某些工作。 然後呼叫 Repaint 方法。
現在檢查 addPaintObject 方法定義。 它也會對 history 和 paintObjects 執行某些工作。 它也會呼叫 Repaint。
檢查地圖找出問題
似乎所有修改 history 和 paintObjects 的方法都會呼叫 Repaint。 但 undo 方法不會呼叫 Repaint,即使 undo 會修改相同的欄位。 因此您認為可以從 Repaint 呼叫 undo 解決這個問題。
如果您沒有對應顯示這個遺漏的呼叫,可能難以發現這個問題,特別是在較複雜的程式碼中。
共用您的探索和後續步驟
在您或其他人修正此 Bug 之前,您可以在對應上記下關於問題和修正方式的附註。
例如,您可以使用色彩加入註解至對應和旗標項目。
如果您有安裝 Microsoft Outlook,您可以用電子郵件將對應傳送給其他人。 您也可以將對應匯出為影像或其他格式。
解決問題並顯示您的作法
若要修正這個 Bug,您必須將對 Repaint 的呼叫加入至 undo。
若要確認您的修正,先重新啟動偵錯工作階段,然後嘗試重現 Bug。 現在選擇 [復原前一次筆觸] 會如您所預期作用,並確認您已進行正確的修正。
您可以更新對應以顯示您所做的修正。
您的對應現在會在 [復原] 和 [重繪。] 之間顯示連結。
注意事項 |
---|
當您更新對應時,可能會看到訊息,指出用於建立對應的程式碼索引已更新。這表示有人變更程式碼,使您的對應與目前的程式碼不符。這不會阻止您更新對應,不過,您可能必須重新建立對應以確認其符合程式碼。 |
現在您已完成調查。 您藉由對應程式碼成功找到問題並且加以解決。 您還可以利用對應巡覽程式碼、記住您所學到的內容,以及顯示您用於解決問題的步驟。