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


 

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

可以使用“附加到進程” 來調試本地或遠程計算機上正在運行的應用、同時調試多個進程、 調試並非在 Visual Studio 中創建的應用或未使用附帶調試器從 Visual Studio 啟動的任何應用。 例如,如果運行的是不帶調試器的應用,並觸發異常,則可以將調試器附加到運行應用的進程並開始調試。

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

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

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

    “連接類型”應設置為“默認”。 “連接目標”應該是本地計算機名稱。

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

    • 若要快速選擇一個進程,請在“篩選進程”框中鍵入其名稱或首字母。

    • 如果不知道進程名稱,請瀏覽列表或參閱常見調試方案,了解一些常見的進程名稱。

    “附加到進程”對話框處於打開狀態時,進程可以在后台啟動和停止,因此正在運行的進程列表可能不總是最新內容。

       可隨時選擇“刷新”查看當前列表。

  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. 在中附加到進程對話框中,選擇附加。

    此時,附加將徹底失敗,並且你將收到一條特定的錯誤消息。

 

其他信息請參考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM