使用 Visual Studio 偵錯工具連結至執行中處理序
您可以將 Visual Studio 偵錯工具連結至本機或遠端電腦上執行的處理序。 執行處理序之後,請選取 [偵錯]>[連結至處理序],或在 Visual Studio 中按 Ctrl+Alt+p,並使用 [連結至處理序] 對話方塊將偵錯工具連結至處理序。
您可以使用 [連結至處理序] 來偵錯本機或遠端電腦上執行的應用程式、同時偵錯多個處理序、偵錯未在 Visual Studio 中建立的應用程式,或偵錯您未從 Visual Studio 啟動且連結偵錯工具的任何應用程式。 例如,如果您在沒有偵錯工具的情況下執行應用程式並遇到例外狀況,您接著可以將偵錯工具連結至執行應用程式並開始偵錯的處理序。
提示
不確定是否要使用 [連結至處理序] 來進行偵錯案例? 請參閱常見的偵錯案例。
連結至本機電腦上執行中的處理序
若要快速重新連結至您先前連結的處理序,請參閱重新連結至處理序。
從 Visual Studio 2022 17.10 預覽版 2 開始,[連結至處理序] 對話框已變更。 如果您需要符合舊對話框的指示,請切換至 Visual Studio 2019 檢視 (文章中左上方的版本選取器)。
若要連結至本機電腦上的處理序:
在 Visual Studio 中,選取 [偵錯]>[連結至處理序] (或按 Ctrl+Alt+P) 來開啟 [連結至處理序] 對話框。
將連線類型設定至本機。
在大部分偵錯案例中,您都可以使用本機。 某些案例可能需要不同的連線類型。 如需詳細資訊,請參閱本文中的其他章節或常見偵錯案例。
在 [可用的處理序] 清單中,選取您要連結的一或多個處理序。
- 若要快速選取處理序,請在 [篩選處理序] 方塊中輸入其名稱或第一個字母。
- 如果您不知道處理序名稱,請瀏覽清單,或參閱常見偵錯案例以查看一些常見的處理序名稱。
- 使用追蹤視窗按鈕來啟用在計算機上選取視窗,以設定進程。
提示
當 [連結至處理序] 對話框開啟時,可以在背景中啟動和停止處理序,因此執行中處理序的清單不一定是最新的。 您可以隨時選取 [重新整理] 以查看目前的清單。
在連結至程式碼類型欄位中,確定已列出您打算偵錯的程式碼類型。
預設的自動設定適用於大部分的應用程式類型,但您可以選取特定的程式碼類型來手動指定調試偵錯工具類型。
選取連結。
提示
在有多個相同處理序的案例中,請使用 [標題] 資料行中的 [命令列] 資料行或 w3wp 處理序詳細資料來識別正確的處理序。
在 Visual Studio 中,選取 [偵錯]>[連結至處理序] (或按 Ctrl+Alt+P) 來開啟 [連結至處理序] 對話框。
檢查 [連線類型]。
在大部分情況下,您可以使用 [預設]。 某些案例可能需要不同的連線類型。 如需詳細資訊,請參閱本文中的其他章節或常見偵錯案例。
將 [連線目標] 設為您的本機電腦名稱。
在 [可用的處理序] 清單中,選取您要連結的一或多個處理序。
若要快速選取處理序,請在 [篩選處理序] 方塊中輸入其名稱或第一個字母。
如果您不知道處理序名稱,請瀏覽清單,或參閱常見偵錯案例以查看一些常見的處理序名稱。
提示
當 [連結至處理序] 對話框開啟時,可以在背景中啟動和停止處理序,因此執行中處理序的清單不一定是最新的。 您可以隨時選取 [重新整理] 以查看目前的清單。
在 [連結至] 欄位中,確定已列出您打算偵錯的程式碼類型。 預設的 [自動] 設定適用於大部分的應用程式類型。
如果您使用 [預設] 連線類型,可以手動選取您要連結的程式碼類型。 否則,可能會停用 [選取] 選項。
若要手動選取程式碼類型:
- 按一下 [選取]。
- 在 [選取程式碼類型] 對話方塊中,選取 [偵錯這些程式碼類型]。 如果您在嘗試連結至清單中的處理序時發生失敗,您可以使用 [選取程式碼類型] 對話框來協助針對問題進行疑難排解。
- 選取您要偵錯的程式碼類型。
- 選取 [確定]。
選取連結。
注意
您可以連結至多個應用程式以進行偵錯,但偵錯工具一次只能有一個使用中程式。 您可以在 Visual Studio [偵錯位置] 工具列或 [處理序] 視窗中設定使用中的應用程式。
連結至遠端電腦上的處理序
您也可以在 [連結至處理序] 對話框中選取遠端電腦、檢視在該電腦上執行的可用處理序清單,以及連結至一或多個處理序以進行偵錯。 遠端偵錯工具 (msvsmon.exe) 必須在遠端電腦上執行。 如需詳細資訊,請參閱遠端偵錯。
從 Visual Studio 2022 17.10 預覽版 2 開始,[連結至處理序] 對話框已變更。 如果您需要符合舊對話框的指示,請切換至 Visual Studio 2019 檢視 (文章中左上方的版本選取器)。
若要連結至遠端電腦上的執行中處理序:
在 Visual Studio 中,選取 [偵錯]>[連結至處理序] (或按 Ctrl+Alt+P) 來開啟 [連結至處理序] 對話框。
將連線類型設定為遠端連線類型,例如遠端 (Windows)。
在 Windows 上進行遠端偵錯的大部分案例中,您可以使用 遠端 (Windows) 。 某些案例 (例如偵錯 Linux 或容器化應用程式) 需要不同的連線類型。 如需詳細資訊,請參閱本文中的其他章節或常見偵錯案例。
連線目標選項隨即出現。
在 [連線目標] 方塊中,使用下列其中一種方法選取遠端電腦:
- 選取 [連線目標] 旁的下拉式箭號,然後從下拉式清單中選取電腦名稱稱。
- 在 [連線目標] 方塊中輸入電腦名稱稱,然後按 Enter。
- 選取 [連線目標] 方塊旁的 [尋找] 按鈕,以開啟 [遠端連線] 對話方塊。 [遠端連線] 對話框會列出本機子網路上或直接連結至電腦的所有裝置。 您可能需要在伺服器上開啟 UDP 連接埠 3702,才能探索遠端裝置。 選取您想要的電腦或裝置,然後關閉對話框。
確認 Visual Studio 會將必要的連接埠新增至電腦名稱,其顯示的格式為:<遠端電腦名稱>:port
注意
如果您無法使用遠端電腦名稱稱進行連線,請嘗試使用 IP 和連接埠位址 (例如
123.45.678.9:4026
)。 4026 是 Visual Studio 2022 遠端偵錯工具的預設連接埠。 如需其他遠端偵錯工具連接埠指派,請參閱遠端偵錯工具連接埠指派。[連線類型] 設定會在偵錯工作階段之間持續維持。 只有在成功偵錯與該目標的連線發生時,[連線目標] 設定才會在偵錯工作階段之間持續維持。
按一下 [重新整理] 填入 [可用的處理序] 清單。
提示
當 [連結至處理序] 對話框開啟時,可以在背景中啟動和停止處理序,因此執行中處理序的清單不一定是最新的。 您可以隨時選取 [重新整理] 以查看目前的清單。
在 [可用的處理序] 清單中,選取您要連結的一或多個處理序。
若要快速選取處理序,請在 [篩選處理序] 方塊中輸入其名稱或第一個字母。
如果您不知道處理序名稱,請瀏覽清單,或參閱常見偵錯案例以查看一些常見的處理序名稱。
若要尋找在所有使用者帳戶下執行的處理序,請選取 [顯示所有使用者的處理序] 核取方塊。
注意
如果您嘗試連結至未受信任的使用者帳戶所擁有的處理序,會出現安全性警告對話框確認訊息。 如需詳細資訊,請參閱安全性警告: 連結至不受信任的使用者所擁有的處理序可能會造成危險。如果下列資訊看起來有問題,或您不確定,不會連結至這個處理序。
在連結至程式碼類型欄位中,確定已列出您打算偵錯的程式碼類型。
預設的自動設定適用於大部分的應用程式類型,但您可以選取特定的程式碼類型來手動指定調試偵錯工具類型。
選取附加。
在 Visual Studio 中,選取 [偵錯]>[連結至處理序] (或按 Ctrl+Alt+P) 來開啟 [連結至處理序] 對話框。
檢查 [連線類型]。
在大部分情況下,您可以使用 [預設]。 某些案例 (例如偵錯 Linux 或容器化應用程式) 需要不同的連線類型。 如需詳細資訊,請參閱本文中的其他章節或常見偵錯案例。
在 [連線目標] 方塊中,使用下列其中一種方法選取遠端電腦:
- 選取 [連線目標] 旁的下拉式箭號,然後從下拉式清單中選取電腦名稱稱。
- 在 [連線目標] 方塊中輸入電腦名稱稱,然後按 Enter。
- 選取 [連線目標] 方塊旁的 [尋找] 按鈕,以開啟 [遠端連線] 對話方塊。 [遠端連線] 對話框會列出本機子網路上或直接連結至電腦的所有裝置。 您可能需要在伺服器上開啟 UDP 連接埠 3702,才能探索遠端裝置。 選取您想要的電腦或裝置,然後按一下 [選取]。
確認 Visual Studio 會將必要的連接埠新增至電腦名稱,其顯示的格式為:<遠端電腦名稱>:port
注意
如果您無法使用遠端電腦名稱稱進行連線,請嘗試使用 IP 和連接埠位址 (例如
123.45.678.9:4022
)。 4024 是 Visual Studio 2019 遠端偵錯工具的預設連接埠。 如需其他遠端偵錯工具連接埠指派,請參閱遠端偵錯工具連接埠指派。[連線類型] 設定會在偵錯工作階段之間持續維持。 只有在成功偵錯與該目標的連線發生時,[連線目標] 設定才會在偵錯工作階段之間持續維持。
按一下 [重新整理] 填入 [可用的處理序] 清單。
提示
當 [連結至處理序] 對話框開啟時,可以在背景中啟動和停止處理序,因此執行中處理序的清單不一定是最新的。 您可以隨時選取 [重新整理] 以查看目前的清單。
在 [可用的處理序] 清單中,選取您要連結的一或多個處理序。
若要快速選取處理序,請在 [篩選處理序] 方塊中輸入其名稱或第一個字母。
如果您不知道處理序名稱,請瀏覽清單,或參閱常見偵錯案例以查看一些常見的處理序名稱。
若要尋找在所有使用者帳戶下執行的處理序,請選取 [顯示所有使用者的處理序] 核取方塊。
注意
如果您嘗試連結至未受信任的使用者帳戶所擁有的處理序,會出現安全性警告對話框確認訊息。 如需詳細資訊,請參閱安全性警告: 連結至不受信任的使用者所擁有的處理序可能會造成危險。如果下列資訊看起來有問題,或您不確定,不會連結至這個處理序。
在 [連結至] 欄位中,確定已列出您打算偵錯的程式碼類型。 預設的 [自動] 設定適用於大部分的應用程式類型。
如果您使用 [預設] 連線類型,可以手動選取您要連結的程式碼類型。 否則,可能會停用 [選取] 選項。
若要手動選取程式碼類型:
- 按一下 [選取]。
- 在 [選取程式碼類型] 對話方塊中,選取 [偵錯這些程式碼類型]。 如果您在嘗試連結至清單中的處理序時發生失敗,您可以使用 [選取程式碼類型] 對話框來協助針對問題進行疑難排解。
- 選取 [確定]。
選取連結。
注意
您可以連結至多個應用程式以進行偵錯,但偵錯工具一次只能有一個使用中程式。 您可以在 Visual Studio [偵錯位置] 工具列或 [處理序] 視窗中設定使用中的應用程式。
在某些情況下,在遠端桌面 (終端機服務) 工作階段中進行偵錯時,[可使用的處理序] 清單並不會顯示所有可使用的處理序。 如果您是以具有有限使用者帳戶的使用者身分執行 Visual Studio,則 [可用的處理序] 清單將不會顯示工作階段 0 中執行的處理序。 工作階段 0 用於服務和其他伺服器處理序,包括 w3wp.exe。 可藉由使用系統管理員帳戶來執行 Visual Studio,或是從伺服器主控台 (而非遠端桌面工作階段) 執行 Visual Studio,來解決這個問題。
如果這些解決方法都沒有效,則第三個選項是從 Windows 命令列執行 vsjitdebugger.exe -p <ProcessId>
以連結至處理序。 您可以使用 tlist.exe 來判斷處理序識別碼。 若要取得 tlist.exe,您可以從 WDK 和 WinDbg 下載來下載並安裝適用於 Windows 的偵錯工具。
連結至在 Azure App Service 上執行的 .NET Core 處理序 (Windows)
如果您要發佈至 Azure App Service (Windows),請參閱在 Azure 上對 ASP.NET Core 進行遠端偵錯或偵錯 Azure App Service 以取得指示。
連結至在 Azure App Service 上執行的 .NET Core 處理序 (Windows)
如果您要發佈至 Azure App Service (Windows),您會在發行設定檔中 [裝載] 底下的 [...] 功能表下找到 [連結偵錯工具] 選項。 Visual Studio 會嘗試將遠端偵錯工具連結至設定檔所發行的 Azure App Service 執行個體。
使用 SSH 連結至在 Linux 上執行的 .NET Core 處理序
如需詳細資訊,請參閱使用 SSH 在 Linux 上執行的遠端偵錯 .NET Core。
連結至於 Docker 容器執行的處理序
從 Visual Studio 2019 開始,您可以將 Visual Studio 偵錯工具連結至 Docker 容器上執行的處理序。 如需了解 Linux .NET Core Docker 容器,請參閱連結至於 Linux Docker 容器執行的處理序。 如需了解 Windows Docker 容器,請參閱連結至於 Windows Docker 容器執行的處理序。
重新連結至處理序
您可以選擇 [偵錯]>[重新連結至處理序] (Shift+Alt+P),以快速重新連結至先前連結的處理序。 當您選擇此命令時,偵錯工具會立即嘗試連結至您連結的最後一個處理序,方法是先嘗試比對先前的程序識別碼,如果失敗,則比對先前的處理序名稱。 如果找不到相符項目,或如果數個程序具有相同的名稱,則會開啟 [連結至處理序] 對話框,讓您可以選取正確的程序。
注意
從 Visual Studio 2017 開始,即可使用 [重新連結至處理序] 命令。
常見的偵錯案例
為了協助您判斷是否要使用 [連結至處理序],以及要連結的處理序,下表顯示一些常見的偵錯案例,並提供更多可用指示的連結。 (此清單並不完整。)
若要快速選取要連結的執行中處理序,請在 Visual Studio 中輸入 Ctrl+Alt+P,然後輸入處理序名稱的第一個字母。
偵錯工具若要連結至以 C++ 撰寫的程式碼,該程式碼必須發出 DebuggableAttribute
。 您可以使用 /ASSEMBLYDEBUG 連結器選項連結,將其自動加入程式碼。
針對用戶端指令碼偵錯,必須在瀏覽器中啟用指令碼偵錯。 若要在 Chrome 上偵錯用戶端指令碼,請選擇 [JavaScript] 或 [TypeScript] 做為程式碼類型,且視您的應用程式類型而定,您可能需要關閉所有 Chrome 執行個體,並在偵錯模式中啟動瀏覽器 (從命令列鍵入 chrome.exe --remote-debugging-port=9222
)。
針對用戶端指令碼偵錯,必須在瀏覽器中啟用指令碼偵錯。 若要在 Chrome 上偵錯用戶端指令碼,請選擇 [JavaScript (Chrome)] 或 [JavaScript (Microsoft Edge - Chromium)] 做為程式碼類型,且視您的應用程式類型而定,您可能需要關閉所有 Chrome 執行個體,並在偵錯模式中啟動瀏覽器 (從命令列鍵入 chrome.exe --remote-debugging-port=9222
)。 在舊版 Visual Studio 中,Chrome 的指令碼偵錯工具是 Web 套件。
案例 | Debug 方法 | 程序名稱。 | 附註和連結 |
---|---|---|---|
ASP.NET Core - IIS 伺服器上的遠端偵錯 | 使用遠端工具和 [連結至處理序] | w3wp.exe 或 dotnet.exe | 從 .NET Core 3 開始,w3wp.exe 處理序會用於預設的應用程式內主控模型。 如需了解應用程式部署,請參閱發佈至 IIS。 如需詳細資訊,請參閱在遠端 IIS 電腦上對 ASP.NET Core 進行遠端偵錯 |
ASP.NET Core - 在不使用偵錯工具的情況下啟動應用程式之後,於本機電腦上進行偵錯 | 使用 [連結至處理序] | appname.exe 或 iisexpress.exe | 這可能有助於讓您的應用程式載入更快,例如分析時。 ASP.NET Core 的預設本機伺服器 (kestrel) 程式為 appname.exe。 |
ASP.NET 4 或 4.5 - IIS 伺服器上的遠端偵錯 | 使用遠端工具和 [連結至處理序] | w3wp.exe | 請參閱在遠端 IIS 電腦上對 ASP.NET 進行遠端偵錯 |
用戶端指令碼 - 針對支援的應用程式類型,在本機 IIS 伺服器上進行偵錯 | 使用 [連結至處理序] | chrome.exe 或 msedge.exe | 必須啟用指令碼偵錯。 針對 Chrome,您也必須以偵錯模式執行 Chrome (從命令列輸入 chrome.exe --remote-debugging-port=9222 ),然後在 [連結至] 欄位中選取 [JavaScript] 或 [TypeScript]。 |
C#、Visual Basic 或 C++ 應用程式 - 本機電腦上的偵錯 | 使用標準偵錯 (F5) 或 [連結至處理序] | <appname>.exe | 在大部分情況下,請使用標準偵錯,而不是 [連結至處理序]。 |
Windows 傳統型應用程式 - 遠端偵錯 | 遠端工具 | N/A | 請參閱遠端偵錯 C# 或 Visual Basic 應用程式或遠端偵錯 C++ 應用程式 |
Linux 上的 .NET Core - 偵錯 | 使用 [連結至處理序] | dotnet.exe 或唯一的處理序名稱 | 若要使用 SSH,請參閱使用 SSH 遠端偵錯 Linux 上執行的 .NET Core。 如需了解容器化應用程式,請參閱連結至在 Docker 容器中執行的處理序。 |
容器化應用程式 - 偵錯 | 使用 [連結至處理序] | dotnet.exe 或唯一的處理序名稱 | 請參閱連結至在 Docker 容器中執行的處理序 |
Linux 上的 Python - 遠端偵錯 | 使用 [連結至處理序] | debugpy | 請參閱從 Python 工具遠端連結 |
其他支援的應用程式類型 - 在伺服器處理序上進行偵錯 | 如果伺服器是遠端的,請使用遠端工具,並 [連結至處理序] | chrome.exe、msedge.exe 或其他處理序 | 如有必要,請使用資源監視器來協助識別處理序。 請參閱遠端偵錯。 |
通用 Windows 平台 (UWP) 應用程式、OneCore、HoloLens 或 IoT 應用程式 - 遠端偵錯 | 針對已安裝的應用程式套件進行偵錯 | N/A | 請參閱偵錯已安裝的應用程式套件,而不是使用連結至處理序 |
UWP 應用程式、OneCore、HoloLens 或 IoT - 對未從 Visual Studio 啟動的應用程式進行偵錯 | 針對已安裝的應用程式套件進行偵錯 | N/A | 請參閱偵錯已安裝的應用程式套件,而不是使用連結至處理序 |
使用偵錯工具功能
若要在連結至處理序時使用 Visual Studio 偵錯工具的完整功能 (例如點擊中斷點),應用程式必須完全符合您的本機來源和符號。 也就是說,偵錯工具必須能夠載入正確的符號 (.pdb) 檔案。 根據預設,這需要偵錯組建。
針對遠端偵錯案例,您必須在 Visual Studio 中開啟原始程式碼 (或原始程式碼複本)。 遠端電腦上的已編譯應用程式二進位檔必須來自與本機電腦上相同的組建。
在某些本機偵錯案例中,如果應用程式存在正確的符號檔,則您可以在 Visual Studio 中偵錯,而無法存取來源。 根據預設,這需要偵錯組建。 如需詳細資訊,請參閱指定符號和來源檔案。
疑難排解連結錯誤
在某些情況下,偵錯工具可能需要協助,才能正確識別要偵錯的程式碼類型。 如果連線值已正確設定 (您可以在 [可用的處理序] 清單中檢視正確的處理序),但偵錯工具無法連結,請嘗試在程式碼清單中選取最適當偵錯工具,例如,如果您要偵錯 Linux 或 Python 應用程式,則可能是必要的。
在某些情況下,偵錯工具可能需要協助,才能正確識別要偵錯的程式碼類型。 如果連線值已正確設定 (您可以在 [可用的處理序] 清單中檢視正確的處理序),但偵錯工具無法連結,請嘗試在 [連線類型] 清單中選取最適當的連線類型,例如,如果您要偵錯 Linux 或 Python 應用程式,則可能是必要的。 如果您使用預設連線類型,則也可以選取要連線的特定程式碼類型,如本節稍後所述。
當偵錯工具連結至執行中的處理序時,該處理序可以包含一種或多種程式碼類型。 偵錯工具可連結的程式碼類型會在 [選取程式碼類型] 對話框中顯示並供您選取。
有時候,偵錯工具可以成功連結至一種程式碼類型,而無法連結至另一種程式碼類型。 一般而言,這會發生於:
- 您嘗試連結至遠端電腦上執行的處理序。 遠端電腦可能為某些程式碼類型安裝了遠端偵錯元件,但沒有安裝其他程式碼類型的遠端偵錯元件。
- 您嘗試連結至兩個或多個處理序以進行直接的資料庫偵錯。 (SQL 偵錯僅支援連結至單一處理序)。
如果偵錯工具能連結至某些程式碼類型 (而非所有程式碼類型),您可能會看到識別無法連結之類型的訊息。
如果偵錯工具成功連結到至少一種程式碼類型,您可以繼續偵錯該處理序。 您只能偵錯已連結成功的程式碼類型。 處理序中未連結的程式碼仍會執行,但您將無法設定中斷點、檢視資料,或在該程式碼上執行其他偵錯作業。
如果您需要更多相關資訊以了解偵錯工具無法連結至程式碼類型的原因,可以嘗試重新連結至該程式碼。
取得程式碼類型為何無法附加的相關資訊
與處理序中斷連結。 在 [偵錯] 功能表上,選取 [全部中斷連結]。
重新連結至處理序,只選取無法連結的程式碼類型。
在 [連結至處理序] 對話框的 [可使用的處理序] 清單中,選取該處理序。
在程式碼類型選項中,選取無法附加的程式碼類型。 取消選取其他程式碼類型。
在 [連結至處理序] 對話框中,選取 [連結]。
這時,該連結將完全失敗,您將取得特定的錯誤訊息。
與處理序中斷連結。 在 [偵錯] 功能表上,選取 [全部中斷連結]。
重新連結至處理序,只選取無法連結的程式碼類型。
在 [連結至處理序] 對話框的 [可使用的處理序] 清單中,選取該處理序。
選取選取。
在 [選取程式碼類型] 對話框中,選取 [偵錯這些程式碼類型] 以及之前連結失敗的程式碼類型。 取消選取其他程式碼類型。
選取 [確定]。
在 [連結至處理序] 對話框中,選取 [連結]。
這時,該連結將完全失敗,您將取得特定的錯誤訊息。