當您在主要 Visual Studio IDE 中執行偵錯工具來偵錯 Visual Studio 延伸模組時,會使用稱為實驗性實例的 Visual Studio 特殊實例來裝載您的延伸模組。 這兩個執行個體會獨立且同時運行。 本文說明如何使用 VisualStudio.Extensibility SDK 建立的延伸模組在 Visual Studio IDE 的實驗性執行個體中執行時偵錯它們。
延伸處理過程
偵錯程式會因延伸模組是在同進程或跨進程中執行而略有不同。 請參閱 建立您的第一個 VSSDK 相容 VisualStudio.Extensibility 延伸模組。 使用跨進程延伸模組時,您的延伸模組會在 Visual Studio 延伸模組的專用進程中執行。 此程式稱為 Microsoft.ServiceHub.Host.Extensibility,會代理 Visual Studio 的 IDE 程式與裝載延伸模組的程式之間的所有通訊。 當您使用 F5 啟動延伸模組時,Visual Studio 會啟動 Visual Studio 實驗實例,並連線到裝載延伸模組的進程。 您通常不需要擔心確切的進程,因為當您在 Visual Studio IDE 中按下 從 F5 擴充專案啟動偵錯工具時,Visual Studio 會找出要將偵錯工具連線到的正確進程。
當您啟動偵錯會話時,不會立即載入延伸模組及其符號。 在載入延伸模組之前,Visual Studio 會追蹤可以啟用延伸模組的位置。 此資訊在 的 VisualStudioContribution內部實例中管理。 甚至在載入延伸模組之前,Visual Studio 也會有其可能啟用位置的相關資訊,例如當使用者選擇特定功能表項目、按下工具列按鈕,或將特定類型的檔案載入編輯器時。 在 IDE 中啟用之前,您的擴充功能組件不會被載入。 因此,在偵錯時,您需要做的第一件事是在 Visual Studio IDE 中採取動作來觸發擴充功能加載。 例如,您可能需要選取擴充功能的功能表項目或工具列按鈕。 此時,您的擴充元件會載入,初始化程式碼會執行,而且您可以點擊中斷點並逐步執行程式碼。 在延伸模組中執行的第一個程式碼是 InitializeAsync 類別上 Extension 的方法,下一個方法是 InitializeServices。
處理程序和呼叫堆疊
如果您的延伸模組處於同進程中,呼叫堆疊會包含 Visual Studio 堆疊框架,以及延伸模組的堆疊框架。 符號通常不適用於 Visual Studio,但您可以看到 Visual Studio 呼叫延伸模組的呼叫。
使用跨進程延伸模組時,您只會看到延伸模組的呼叫堆疊;Visual Studio 堆疊框架位於個別進程中。 Visual Studio 會透過 JsonRpc 相容的介面來呼叫您的延伸模組,ServiceHub 主機負責路由傳送呼叫,然後從回呼函式觸發執行程序。 當您的回呼函式返回時,程式控制會返回 Visual Studio。
狀態會根據需求以各種方法傳遞至您的延伸模組,並由 IClientContext 實例包裝以方便使用。然而,請務必注意它是狀態的快照,而在快照生成的時間與您從延伸模組程式碼讀取或在偵錯工具中檢視時,狀態可能已經發生變更。
ServiceHub 主機進程中有一些內部程式碼會處理 RPC (遠端程序呼叫) 代理。 如果此圖層發生故障,您看不到它。 此類錯誤應報告為產品問題。
偵錯 Visual Studio 實驗性實例中的延伸模組
開啟擴充功能專案。
例如,在衍生自
InitializeServices的主類別的擴充功能方法Extension中設定中斷點。 若要在程式碼行上設定中斷點,請按一下該行,然後按F9。從主功能表中,選擇 除錯 > 開始除錯 或按
F5。 Visual Studio 實驗實例已啟動;同時,ServiceHub 主機進程啟動。在 Visual Studio 的實驗實例中執行步驟,以導致延伸模組啟用或重現您想要偵錯的案例。
Visual Studio 會在中斷點停止。
小提示
擁有多個監視器會很方便,因此您可以在兩個不同的監視器上同時看到偵錯工具和實驗實例。 您可能想要變更實驗執行個體中的主題,以便更清楚地識別您隨時正在使用的開發環境。 請參閱 在 Visual Studio 中變更字型、色彩和主題。
使用 Diagnostics Explorer 偵錯延伸模組
如需詳細資訊,請參閱 VisualStudio.Extensibility Diagnostics Explorer 。
故障排除
啟動偵錯工具時,如果您看到 目前產品不支援此延伸模組錯誤,請開啟檔案 .vsixmanifest ,然後檢查元素 InstallationTarget 。 不支援安裝目標 Microsoft.VisualStudio.IntegratedShell ,請改用 Microsoft.VisualStudio.Community 。 請參閱 VSIX 延伸模組架構 2.0 參考。