偵錯多個處理序 (C#、Visual Basic、C++)
Visual Studio 可以偵錯具有數個處理序的解決方案。 您可以在處理序之間啟動和切換、中斷、繼續、逐步執行來源、停止偵錯,以及結束或中斷連結個別處理序。
使用多個處理序開始偵錯
當 Visual Studio 解決方案中有多個專案可以獨立執行時,您可以選取偵錯工具要啟動的專案。 目前的啟動專案會在 [方案總管] 中以粗體顯示。
若要變更啟動專案,,請在 [方案總管] 中,以滑鼠右鍵按一下不同專案,並選取 [設定為啟動專案]。
若要從 [方案總管] 開始偵錯專案,而不讓該專案成為啟動專案,請以滑鼠右鍵按一下專案,並選取 [偵錯]>[啟動新執行個體] 或 [逐步執行新執行個體]。
若要從解決方案屬性設定啟動專案或多個專案:
在 [方案總管] 中按一下解決方案,然後在工具列中選取 [屬性] 圖示,或以滑鼠右鍵按一下解決方案,並選取 [屬性]。
在 [屬性] 頁面中,選取 [通用屬性]>[啟動專案]。
選取 [目前選取項目]、[單一啟動專案],以及專案檔案,或 [多個啟動專案]。
如果您選取 [多個啟動專案],您可以變更每個專案的啟動順序和動作:[啟動]、[啟動但不偵錯],或 [無]。
選取 [套用] 或 [確定],以套用並關閉對話方塊。
連結至處理序
偵錯工具也可以連結至在 Visual Studio 外部處理序執行的應用程式,包括遠端裝置上的處理序。 連結至應用程式之後,您即可使用 Visual Studio 偵錯工具。 偵錯功能可能會受到限制。 這取決於應用程式是否使用偵錯資訊建置、您是否有權存取應用程式的原始程式碼,以及 JIT 編譯程式是否追蹤偵錯資訊。
如需詳細資訊,請參閱連結至執行中的處理序。
附加至執行中的處理序:
執行應用程式後,選取 [偵錯]>[連結至處理序]。
在 [連結至處理序] 對話方塊中,從 [可使用的處理序] 清單中選取處理序,然後選取 [連結]。
注意
偵錯工具不會自動附加至所偵錯處理序啟動的子處理序 (即使子專案位於相同方案中)。 若要偵錯子處理序,請在子處理序啟動之後連結至子處理序,或設定 Windows Registry Editor,以在新偵錯工具執行個體中啟動子處理序。
在偵錯工具中使用登錄編輯器以自動啟動處理序
有時候,您可能需要對其他處理序所啟動的應用程式,偵錯啟始程式碼。 這類範例包括了服務和自訂安裝動作。 您可以啟動偵錯工具,並自動連結至應用程式。
藉由執行 regedit.exe 以啟動 Windows Registry Editor。
在 Registry Editor 中,導覽至 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options。
選取要在偵錯工具中啟動之應用程式的資料夾。
如果應用程式未列在子資料夾中,請以滑鼠右鍵按一下 [影像檔案執行選項],選取 [新增]>[索引鍵],然後輸入應用程式名稱。 或者,以滑鼠右鍵按一下樹狀結構中的新索引鍵,選取 [重新命名],然後輸入應用程式名稱。
以滑鼠右鍵按一下樹狀結構中的新索引鍵,然後選取 [新增]>[字串值]。
將新值名稱從 New Value #1 變更為
debugger
。以滑鼠右鍵按一下 [偵錯工具],並選取 [修改]。
在 [編輯字串] 對話方塊中,在 [值資料] 方塊中,輸入
vsjitdebugger.exe
,然後選取 [確定]。
使用多個處理序進行偵錯
使用數個處理序對應用程式進行偵錯時,中斷、逐步執行和繼續偵錯工具命令預設會影響所有處理序。 例如,當一個處理序在中斷點暫止時,所有其他處理序的執行也會暫止。 您可以變更這項預設行為,以便更充分掌控執行命令的目標。
若要變更某個處理序中斷時,是否會暫止所有處理序:
- 在 [工具] (或 [偵錯]) >[選項]>[偵錯]>[一般] 下,選取或清除 [如果其中一個處理序中斷,就中斷所有處理序] 核取方塊。
中斷、逐步執行和繼續命令
下表描述選取或取消選取 [如果其中一個處理序中斷,就中斷所有處理序] 核取方塊時,偵錯命令的行為:
命令 | 已選取 | 已取消選取 |
---|---|---|
[偵錯]>[全部中斷] | 所有處理序都會中斷。 | 所有處理序都會中斷。 |
[偵錯]>[繼續] | 所有處理序都會繼續執行。 | 所有暫止的處理序都會繼續執行。 |
[偵錯]>[逐步執行]、[不進入函式],或 [跳離函式] | 當目前處理序逐步執行時,所有處理序仍會執行。 然後所有處理序都會中斷。 |
目前處理序會逐步執行。 暫止的處理序會繼續執行。 執行中的處理序會繼續執行。 |
[偵錯]>[逐步執行目前處理序]、[目前處理序不進入函式],或 [目前處理序跳離函式] | N/A | 目前處理序會逐步執行。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
來源視窗中斷點 | 所有處理序都會中斷。 | 只要來源視窗處理序會中斷。 |
來源視窗執行至游標處 來源視窗必須在目前處理序中。 |
當來源視窗處理序執行至游標處然後中斷時,所有處理序仍會執行。 然後所有其他處理序都會中斷。 |
來源視窗處理序會執行至游標處。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
[處理序] 視窗 >[中斷處理序] | N/A | 選取的處理序會中斷。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
[處理序] 視窗>繼續處理 | N/A | 選取的處理序會繼續執行。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
尋找來源和符號 (.pdb) 檔案
若要巡覽處理序的原始程式碼,偵錯工具需要存取處理序的來源檔案和符號檔案。 如需詳細資訊,請參閱指定符號 (.pdb) 和來源檔案。
如果您無法存取處理序的檔案,可以使用 [反組譯碼] 視窗進行巡覽。 如需詳細資訊,請參閱如何:使用反組譯碼視窗。
在處理序之間切換
進行偵錯時,您可以連結至多個處理序,但是無論在任何時間,偵錯工具一次只能有一個作用中處理序。 您可以在 [偵錯位置] 工具列或 [處理序] 視窗中設定使用中或「目前的」處理序。 若要在處理序之間切換,兩個處理序必須處於中斷模式。
若要從 [偵錯位置] 工具列設定目前的處理序:
若要開啟 [偵錯位置] 工具列,請選取 [檢視]>[工具列]>[偵錯位置]。
偵錯期間,在 [偵錯位置] 工具列中,從 [處理序] 下拉式清單中,選取您要設為目前處理序的處理序。
若要從 [處理序] 視窗設定目前處理序:
若要在偵錯時開啟 [處理序] 視窗,請選取 [偵錯]>[Windows]>[處理序]。
在 [處理序] 視窗中,目前的處理序會以黃色箭號標記。 按兩下您想要設定為目前處理序的處理序。
切換至處理序會將該處理序設為目前要偵錯的處理序。 偵錯工具視窗會顯示目前處理序的狀態,而且所有逐步執行命令只會影響目前處理序。
使用多個處理序停止偵錯
根據預設,當您選取 [偵錯]>[停止偵錯] 時,偵錯工具會結束或中斷連結所有處理序。
如果目前處理序是在偵錯工具中啟動,該處理序會結束。
如果您將偵錯工具附加至目前的處理序,則偵錯工具會與處理序中斷連結,並讓處理序繼續執行。
如果您從 Visual Studio 解決方案開始偵錯處理序,請連結至另一個已在執行中的處理序,然後選擇 [停止偵錯],偵錯工作階段會結束。 在 Visual Studio 中啟動的處理序會結束,而連結的處理序會繼續執行。
若要控制停止偵錯影響個別處理序的方式,請在 [處理序] 視窗中,以滑鼠右鍵按一下處理序,然後選取或清除 [偵錯停止時中斷連結] 核取方塊。
注意
[如果其中一個處理序中斷,就中斷所有處理序] 偵錯工具選項不會影響停止處理序、終止處理序,或中斷連結處理序。
停止、結束及中斷連結命令
下表描述對多個處理序進行停止、終止和中斷連結命令的偵錯工具行為:
命令 | 說明 |
---|---|
[偵錯]>[停止偵錯] | 除非在 [處理序] 視窗中變更行為,否則偵錯工具啟動的處理序會結束,而且連結的處理序會中斷連結。 |
[偵錯]>[全部終止] | 所有處理序會結束。 |
[偵錯]>[全部中斷連結] | 偵錯工具會從所有處理序中斷連結。 |
[處理序] 視窗 >[中斷連結處理序] | 偵錯工具會從選取的處理序中斷連結。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
[處理序] 視窗 >[終止處理序] | 選取的處理序會結束。 其他處理序維持其現有的狀態 (已暫止或執行中)。 |
[處理序] 視窗 >[偵錯停止時中斷連結] | 如果已選取,[偵錯]>[停止偵錯] 會中斷連結選取的處理序。 如果未選取,[偵錯]>[停止偵錯] 會結束選取的處理序。 |
相關內容
- 指定符號 (.pdb) 和來源檔案
- Attach to running processes (附加到正在執行的處理序)
- Navigating through code with the debugger (使用偵錯工具巡覽程式碼)
- Just-In-Time 偵錯
- 針對多執行緒應用程式進行偵錯