Visual Studio 調試系列10 附加到正在運行的進程

 

可將 Visual Studio 調試器附加到本地或遠程計算機上正在運行的進程。 進程運行後,在 Visual Studio 中選擇「調試」 > 「附加到進程」,或按 Ctrl+Alt+P,而後使用「附加到進程」對話框將調試器附加到進程。html

可使用「附加到進程」 來調試本地或遠程計算機上正在運行的應用、同時調試多個進程、 調試並不是在 Visual Studio 中建立的應用或未使用附帶調試器從 Visual Studio 啓動的任何應用。 例如,若是運行的是不帶調試器的應用,並觸發異常,則能夠將調試器附加到運行應用的進程並開始調試。ios

01 附加到本地計算機上正在運行的進程

若要附加到本地計算機上的進程,請執行如下操做:chrome

  1. 在 Visual Studio 中,選擇「調試」 > 「附加到進程」(或按 Ctrl+Alt+P),打開「附加到進程」對話框。數據庫

    「鏈接類型」應設置爲「默認」。 「鏈接目標」應該是本地計算機名稱。express

  2. 在「可用進程」列表中,查找並選擇要附加到的一個或多個進程。windows

    • 若要快速選擇一個進程,請在「篩選進程」框中鍵入其名稱或首字母。瀏覽器

    • 若是不知道進程名稱,請瀏覽列表或參閱常見調試方案,瞭解一些常見的進程名稱。安全

    「附加到進程」對話框處於打開狀態時,進程能夠在後臺啓動和中止,所以正在運行的進程列表可能不老是最新內容。 服務器

       可隨時選擇「刷新」查看當前列表。 app

  3. 在「附加到」字段中,確保已列出計劃調試的代碼類型。 默認的「自動」設置適用於大多數應用類型。

    若要手動選擇代碼類型:

    1. 單擊「選擇」。
    2. 在「選擇代碼類型」對話框中,選擇「調試這些代碼類型」。
    3. 選擇你想要調試的代碼類型。
    4. 選擇 肯定。
  4. 選擇「附加」。

可附加到多個應用進行調試,但在調試器中一次只能有一個應用處於活動狀態。 可在 Visual Studio 的「調試位置」工具欄或「進程」窗口中設置活動的應用。

02 附加到遠程計算機上的進程

還能夠在「附加到進程」對話框中選擇遠程計算機,查看該計算機上運行的可用進程列表,並附加到一個或多個進程以進行調試。 遠程調試器 (msvsmon.exe) 必須在遠程計算機上運行。 有關詳細信息,請參閱遠程調試

用於調試已部署到 IIS 的 ASP.NET 應用程序的更完整說明,請參閱遠程調試遠程 IIS 計算機上的 ASP.NET

若要將附加到遠程計算機上正在運行的進程:

  1. 在 Visual Studio 中,選擇「調試」 > 「附加到進程」(或按 Ctrl+Alt+P),打開「附加到進程」對話框。

  2. 在大多數狀況下,「鏈接類型」應爲「默認」。 在「鏈接目標」框中,使用如下方法之一選擇遠程計算機:

    • 選擇下拉箭頭旁邊的「鏈接目標」,並從下拉列表中選擇計算機名稱。

    • 鍵入中的計算機名稱鏈接目標框,而後按Enter。

      驗證 Visual Studio 將所需的端口添加到計算機名稱,將出如今格式: <遠程計算機名稱 >: 端口

      若是您不能使用遠程計算機名稱進行鏈接,請嘗試使用 IP 和端口地址 (例如, 123.45.678.9:4022)。 4024 是 Visual Studio 2019 x64 遠程調試器的默認端口。 有關其餘遠程調試器端口分配,請參閱遠程調試器端口分配。

    • 選擇查找按鈕旁邊鏈接目標框,以打開遠程鏈接對話框。 遠程鏈接對話框會列出本地子網上,或直接鏈接到您的計算機的全部設備。 你可能須要打開 UDP 端口 3702服務器以發現遠程設備上。 選擇的計算機或所需的設備,而後單擊選擇。

    「鏈接類型」設置在調試會話之間保持不變。 而「鏈接目標」設置只有在成功與該目標創建了調試鏈接時纔會在調試會話之間保持不變。

  3. 單擊「刷新」,填充「可用進程」列表。

    「附加到進程」對話框處於打開狀態時,進程能夠在後臺啓動和中止,所以正在運行的進程列表可能不老是最新內容。 可隨時選擇「刷新」查看當前列表。

  4. 在「可用進程」列表中,查找並選擇要附加到的一個或多個進程。

  5. 在「附加到」字段中,確保已列出計劃調試的代碼類型。 默認的「自動」設置適用於大多數應用類型。

    若要手動選擇代碼類型:

    1. 單擊「選擇」。
    2. 在「選擇代碼類型」對話框中,選擇「調試這些代碼類型」。
    3. 選擇你想要調試的代碼類型。
    4. 選擇 肯定。
  6. 選擇「附加」。

在某些狀況下,在遠程桌面(終端服務)會話中進行調試時,「可用進程」列表時不會顯示全部可用進程。 若是以受限制的用戶賬戶的用戶身份運行 Visual Studio,則「可用進程」列表不會顯示在會話 0 中運行的進程。 會話 0 用於服務和其餘服務器進程,包括 w3wp.exe。 可經過如下方法解決該問題:使用管理員賬戶運行 Visual Studio 或從服務器控制檯(而不是「終端服務」會話)運行 Visual Studio。

若是這兩種解決方法都不可行,第三種方法是經過從 Windows 命令行運行 vsjitdebugger.exe -p <ProcessId> 來附加到進程。 您能夠肯定進程 ID 使用tlist.exe。 若要獲取「tlist.exe」,請從 WDK 和 WinDbg 下載中下載並安裝適用於 Windows 的調試工具。

03 從新附加到進程
您能夠快速從新附加到先前已經過選擇附加到的進程 「調試」 > 「從新附加到進程」(Shift+Alt+P)。 當選擇此命令時,調試器會當即嘗試附加到最後鏈接的進程,方法是首次嘗試匹配先前的進程 ID ,若是失敗,將匹配先前的進程名稱。 若是不找到任何匹配項,或多個進程具備相同的名稱,「附加到進程」 對話框將打開,這樣您就能夠選擇正確的進程。

從新附加到進程命令是從 Visual Studio 2017 開始提供。

04 常見的調試方案

爲幫助肯定是否使用「附加到進程」以及要附加到的進程,下表顯示了一些常見調試方案,並提供了指向更多可用說明的連接。 (該列表並未列出詳盡信息。)

對於某些應用類型,如通用 Windows 應用 (UWP) ,不能直接附加到進程名稱,而需使用 Visual Studio 中的「調試安裝的應用程序包」菜單選項(請參閱表格)。

爲使調試器附加到用 C++ 編寫的代碼,該代碼須要發出 DebuggableAttribute。 可經過連接 /ASSEMBLYDEBUG 連接器選項將它自動添加到代碼中。

對於客戶端腳本調試,必須在瀏覽器中啓用腳本調試。 對於調試在 Chrome 上的客戶端腳本,請選擇Web 工具包做爲代碼類型,並根據你的應用類型,可能須要關閉全部 Chrome 實例並在調試模式下啓動瀏覽器 (類型chrome.exe --remote-debugging-port=9222從命令行)。

若要快速選擇正在運行的進程來將附加到,在 Visual Studio 中,鍵入Ctrl+Alt+P,而後鍵入的第一個字母進程名稱。

方案 調試方法 進程名 說明和連接
遠程調試 ASP.NET 4 或 4.5 上 IIS 服務器 使用遠程工具和附加到進程 w3wp.exe 請參閱遠程調試遠程 IIS 計算機上的 ASP.NET
IIS 服務器上的遠程調試 ASP.NET Core 使用遠程工具和附加到進程 dotnet.exe 有關應用程序部署,請參閱發佈到 IIS。 有關調試,請參閱遠程調試遠程 IIS 計算機上的 ASP.NET Core
調試客戶端腳本的本地 IIS 服務器上,爲受支持的應用類型 使用附加到進程 chrome.exe, MicrosoftEdgeCP.exe,或iexplore.exe 必須啓用腳本調試。對於 Chrome 中,也必須在調試模式下,選擇運行 Chrome Webkit 代碼中附加到字段。
調試C#,Visual Basic 或C++在本地計算機上的應用 使用任一標準調試 (F5) 或附加到進程 <appname>.exe 在大多數狀況下,使用標準調試並不附加到進程。
遠程調試 Windows 桌面應用程序 遠程工具 不適用 請參閱遠程調試C#或 Visual Basic 應用程序遠程調試C++應用程序
調試 ASP.NET 應用程序在本地計算機上,在啓動不帶調試器的應用後 使用附加到進程 iiexpress.exe 這可能會有所幫助使應用程序加載速度更快,如 (例如) 進行分析時。
調試服務器進程上的其餘受支持的應用類型 若是遠程服務器,使用遠程工具和附加到進程 chrome.exe, iexplore.exe,或其餘進程 若有必要,使用資源監視器來幫助標識該進程。 請參閱遠程調試
遠程調試的通用 Windows 應用 (UWP)、 OneCore、 HoloLens 或 IoT 應用 調試安裝的應用包 不適用 請參閱調試安裝的應用包而不是使用附加到進程
調試未從 Visual Studio 啓動的通用 Windows 應用 (UWP)、 OneCore、 HoloLens 或 IoT 應用 調試安裝的應用包 不適用 請參閱調試安裝的應用包而不是使用附加到進程
 
05 使用調試器的功能

要在附加到流程時使用Visual Studio調試器的完整功能(如命中斷點),應用程序必須與本地源和符號徹底匹配。也就是說,調試器必須可以加載正確的符號(.pdb)文件。默認狀況下,這須要調試版本。

對於遠程調試方案,您必須已在Visual Studio中打開源代碼(或源代碼的副本)。遠程計算機上編譯的app二進制文件必須來自與本地計算機上相同的版本。

在某些本地調試方案中,若是應用程序中存在正確的符號文件,則能夠在Visual Studio中進行調試而沒法訪問源。默認狀況下,這須要調試版本。有關更多信息,請參閱指定符號和源文件

06 排查附加錯誤
  當調試器附加到一個正在運行的進程時,該進程可能包含一種或多種類型的代碼。 可在 「選擇代碼類型」 對話框中顯示並選擇可將調試器附加到的代碼類型。

有時,調試器能夠成功鏈接到一種代碼類型,但不能鏈接到另外一種代碼類型。若是您嘗試鏈接到遠程計算機上運行的進程,則可能會發生這種狀況。遠程計算機可能爲某些代碼類型安裝了遠程調試組件,但對其餘代碼類型則沒有。若是您嘗試鏈接到兩個或多個進程以進行直接數據庫調試,也會發生此問題。SQL調試僅支持附加到單個進程。

若是調試器可以附加到某些(但不是全部)代碼類型,您會看到一條消息,標識哪些類型沒法附加。

若是調試器成功附加到至少一種代碼類型,則能夠繼續調試該過程。您將只能調試成功附加的代碼類型。進程中未附加的代碼仍將運行,但您將沒法在該代碼上設置斷點,查看數據或執行其餘調試操做。

若是您須要有關調試器沒法附加到代碼類型的緣由的更多具體信息,請嘗試僅從新鏈接到該代碼類型。

得到有關代碼類型未能附加的具體信息:

  1. 從進程中分離。 上調試菜單中,選擇所有分離。

  2. 從新附加到進程,僅選擇代碼類型未能附加。

    1. 在「附加到進程」對話框,選擇「可用進程」列表中的進程。

    2. 選擇選擇。

    3. 在 「選擇代碼類型」 對話框中,選擇 「調試如下代碼類型」 和未能附加的代碼類型。取消選擇其餘代碼類型。

    4. 選擇 肯定。

    5. 在中附加到進程對話框中,選擇附加。

    此時,附加將完全失敗,而且你將收到一條特定的錯誤消息。

 

其餘信息請參考

 

相關文章
相關標籤/搜索