共用方式為


偵錯多個進程 (C#、Visual Basic、C++)

Visual Studio 可以偵錯具有數個進程的解決方案。 您可以啟動和在處理程序之間切換、中斷、繼續執行,逐步檢查原始碼,停止除錯,並結束或分離個別的處理程序。

使用多個進程開始偵錯

當 Visual Studio 解決方案中的多個專案可以獨立執行時,您可以選取偵錯工具啟動的專案。 目前的啟動專案會在 [方案總管] 中以粗體顯示。

若要變更啟動專案,請在 [方案總管] 中,以滑鼠右鍵按一下不同的專案,然後選取 [ 設定為啟動專案]。

若要從 方案總管 開始偵錯專案,而不將其設為啟動專案,請以滑鼠右鍵按一下專案,然後選取 [偵錯>] [啟動新執行個體 ] 或 [ 逐步執行至新執行個體]。

若要從解決方案屬性設定啟動專案或多個專案:

  1. [方案總管] 中選取解決方案,然後選取工具列中的 [屬性] 圖示,或以滑鼠右鍵按一下解決方案,然後選取 [屬性]。

  2. [屬性] 頁面上,選取 通用屬性>啟動專案

    變更專案DBG_Execution_StartMultipleProjects的啟動類型

  3. 選取 [目前選取範圍]、[單一啟動專案和專案檔案] 或 [多個啟動專案]。

    如果您選取 [多個啟動專案],您可以變更每個專案的啟動順序和動作: [開始]、[ 啟動而不偵錯][無]。

  4. 選取 [ 套用] 或 [確定 ] 以套用並關閉對話方塊。

附加至進程

偵錯工具也可以 附加 至 Visual Studio 外部進程中執行的應用程式,包括遠端裝置上。 附加至應用程式之後,您可以使用 Visual Studio 偵錯工具。 偵錯功能可能會受到限制。 這取決於應用程式是否使用偵錯資訊建置、您是否可以存取應用程式的原始程式碼,以及 JIT 編譯器是否正在追蹤偵錯資訊。

如需詳細資訊,請參閱 附加至執行中的程序

若要附加至執行中的處理程序:

  1. 在應用程式執行時,選取 [偵錯>附加至進程]。

    附加至程序對話方塊

  2. [ 附加至程序 ] 對話方塊中,從 [ 可用程序 ] 清單中選取程序,然後選取 [ 附加]。

備註

偵錯工具不會自動附加至偵錯程式所啟動的子程式,即使子專案位於相同的解決方案中也一樣。 若要偵錯子進程,請在子進程啟動之後附加至子進程,或設定 Windows 登錄編輯器以在新的偵錯工具實例中啟動子進程。

使用登錄編輯器在偵錯工具中自動啟動進程

有時候,您可能需要偵錯另一個進程所啟動之應用程式的啟動程式碼。 範例包括服務和自訂設定動作。 您可以啟動偵錯工具並自動附加至應用程式。

  1. 執行 regedit.exe啟動 Windows 登錄編輯器。

  2. 在登錄編輯器中,導覽至 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

  3. 選取您要在偵錯工具中啟動的應用程式資料夾。

    如果應用程式未列為子資料夾,請以滑鼠右鍵按一下 [影像檔案執行選項],選取 [ 新增>金鑰],然後輸入應用程式名稱。 或者,以滑鼠右鍵按一下樹狀結構中的新機密金鑰,選取 [ 重新命名],然後輸入應用程式名稱。

  4. 在樹狀結構中的新索引鍵上按一下滑鼠右鍵,然後選取 [新增>字串值]。

  5. 將新值的名稱從 「新值 #1」 變更為 debugger

  6. 以滑鼠右鍵按一下 偵錯工具 ,然後選取 [ 修改]。

    編輯字串對話方塊

  7. [編輯字串 ] 對話方塊中,輸入 vsjitdebugger.exe[值資料] 方塊,然後選取 [ 確定]。

    regedit.exe中的自動偵錯工具啟動項目

使用多個程序進行除錯

偵錯具有數個進程的應用程式時,預設情況下,中斷、逐步執行和繼續偵錯工具命令會影響所有進程。 例如,當處理程序在岔斷點暫停時,所有其他處理程序的執行也會暫停。 您可以變更此預設行為,以進一步控制執行命令的目標。

若要變更在一個進程中斷時是否暫停所有進程:

  1. [工具] (或 [偵錯) >] 窗格中,展開 [所有設定>偵錯一般>] 區段。
  1. [工具] (或 [偵錯])選項對話方塊中,展開 [偵錯][一般] 區段。
  1. 選取或清除 [當一個進程中斷時中斷所有進程] 選項核取方塊。

中斷、步進、繼續命令

下表說明選取或取消選取 [ 當一個進程中斷時中斷所有進程 ] 複選框時,偵錯命令的行為:

命令 已選擇 取消選取
除錯>全部暫停 所有流程都會失敗。 所有進程都出了問題。
偵錯> 所有程序都恢復。 所有暫停的處理程序都會恢復。
偵錯>跨入跨步跨出 所有進程在目前進程步驟時執行。
然後所有進程都中斷了。
目前的流程步驟。
暫停的處理程序繼續。
運行中的程序繼續。
偵錯>逐步執行進入當前程序逐步執行越過當前程序逐步執行退出當前程序 N/A 目前的流程步驟。
其他進程會維持其現有狀態 (已暫停或執行中)。
來源視窗 中斷點 所有進程都中止。 只有來源視窗的進程發生故障。
來源視窗 執行至游標
來源視窗必須位於目前進程中。
所有進程都會在來源視窗進程執行到游標時執行,然後中斷。
然後所有其他進程都中斷。
來源視窗處理程序會執行至游標。
其他進程會維持其現有狀態 (已暫停或執行中)。
進程視窗>中斷進程 N/A 選取的處理程序中斷。
其他進程會維持其現有狀態 (已暫停或執行中)。
[處理程序] 視窗 >[繼續處理程序] N/A 選取的處理程序會繼續。
其他進程會維持其現有狀態 (已暫停或執行中)。

尋找來源和符號 (.pdb) 檔案

若要流覽進程的原始程式碼,偵錯工具需要存取其原始檔和符號檔。 如需詳細資訊,請參閱 指定符號 (.pdb) 和來源檔案

如果您無法存取進程的檔案,您可以使用 [反組譯 ] 視窗來導覽。 如需詳細資訊,請參閱 如何:使用 [反組譯] 視窗

在進程之間切換

您可以在偵錯時附加至多個進程,但在任何指定時間偵錯工具中只有一個進程處於作用中狀態。 您可以在「偵錯位置」工具列或「處理程序」視窗中設定作用中或目前的處理程序。 若要在進程之間切換,這兩個進程都必須處於中斷模式。

若要從「偵錯位置」工具列設定目前的處理程序:

  1. 若要開啟 [偵錯位置 ] 工具列,請選取 [檢視>工具列]>[偵錯位置]。

  2. 在偵錯期間,在偵錯位置工具列上,從「行程」下拉式清單中選取您要設定為目前行程的行程。

    在進程之間切換(DBG_Execution_SwitchBetweenModules)

若要從「進程」視窗設定目前的進程:

  1. 若要開啟[程序] 視窗,請在除錯時選取[除錯]>[Windows]>[程序]

  2. 「處理程序」 視窗中,目前處理程序會以黃色箭頭標示。 雙擊您要設定為目前程序的程序。

    處理程序視窗

切換至進程會將其設定為目前進程,以進行偵錯。 偵錯工具視窗會顯示目前程序的狀態,而逐步執行命令只會影響目前的程序。

停止使用多個進程進行偵錯

根據預設,當您選取 [偵錯>停止偵錯] 時,偵錯工具會結束或中斷連結所有進程。

  • 如果目前的進程是在偵錯工具中啟動,則會結束進程。

  • 如果您將偵錯工具連結至目前的進程,偵錯工具會與進程分離,並讓進程繼續執行。

如果您從 Visual Studio 解決方案開始偵錯程序,然後附加至已在執行的另一個程序,然後選擇 [停止偵錯],偵錯工作階段就會結束。 在 Visual Studio 中啟動的進程會結束,而您附加的進程會繼續執行。

若要控制 [停止偵錯] 影響個別進程的方式,請在 [ 進程 ] 視窗中,以滑鼠右鍵按一下進程,然後選取或清除 [ 偵錯停止時中斷連結 ] 複選框。

備註

當一個進程中斷時中斷所有進程的調試選項不會影響進程的停止、終止或分離。

停止、終止及分離指令

下表描述偵錯工具 stop、terminate 和 detach 命令與多個程序的行為:

命令 說明
偵錯>停止偵錯 除非在 [進程] 視窗中變更行為,否則偵錯工具啟動的進程會結束,並中斷連結的進程。
偵錯>全部終止 所有進程都結束了。
偵錯>解除全部 偵錯工具會與所有進程分離。
處理程序視窗>分離處理程序 偵錯工具會從選取的程序中斷連結。
其他進程會維持其現有狀態 (已暫停或執行中)。
[進程] 視窗 >[終止進程] 選取的處理程序已結束。
其他進程會維持其現有狀態 (已暫停或執行中)。
處理程序視窗>偵錯停止時解除連結 如果選取,偵錯>停止偵錯會中斷與選取的處理程序的連結。
如果未選取,則 [偵錯>停止偵錯 ] 會結束選取的程序。