天天看點

Visual Studio 調試系列10 附加到正在運作的程序

系列目錄     【已更新最新開發文章,點選檢視詳細】

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

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

01 附加到本地計算機上正在運作的程序

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

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

    “連接配接類型”應設定為“預設”。 “連接配接目标”應該是本地計算機名稱。

    Visual Studio 調試系列10 附加到正在運作的程式
  2. 在“可用程序”清單中,查找并選擇要附加到的一個或多個程序。
    • 若要快速選擇一個程序,請在“篩選程序”框中鍵入其名稱或首字母。
    • 如果不知道程序名稱,請浏覽清單或參閱常見調試方案,了解一些常見的程序名稱。

    “附加到程序”對話框處于打開狀态時,程序可以在背景啟動和停止,是以正在運作的程序清單可能不總是最新内容。

       可随時選擇“重新整理”檢視目前清單。

  3. 在“附加到”字段中,確定已列出計劃調試的代碼類型。 預設的“自動”設定适用于大多數應用類型。

    若要手動選擇代碼類型:

    1. 單擊“選擇”。
    2. 在“選擇代碼類型”對話框中,選擇“調試這些代碼類型”。
    3. 選擇你想要調試的代碼類型。
    4. 選擇 确定。
  4. 選擇“附加”。
Visual Studio 調試系列10 附加到正在運作的程式
可附加到多個應用進行調試,但在調試器中一次隻能有一個應用處于活動狀态。 可在 Visual Studio 的“調試位置”工具欄或“程序”視窗中設定活動的應用。

02 附加到遠端計算機上的程序

還可以在“附加到程序”對話框中選擇遠端計算機,檢視該計算機上運作的可用程序清單,并附加到一個或多個程序以進行調試。 遠端調試器 (msvsmon.exe) 必須在遠端計算機上運作。 有關詳細資訊,請參閱遠端調試。

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

若要将附加到遠端計算機上正在運作的程序:

  1. 在大多數情況下,“連接配接類型”應為“預設”。 在“連接配接目标”框中,使用以下方法之一選擇遠端計算機:
    • 選擇下拉箭頭旁邊的“連接配接目标”,并從下拉清單中選擇計算機名稱。
    • 鍵入中的計算機名稱連接配接目标框,然後按Enter。

      驗證 Visual Studio 将所需的端口添加到計算機名稱,将出現在格式: <遠端計算機名稱 >: 端口

      如果您不能使用遠端計算機名稱進行連接配接,請嘗試使用 IP 和端口位址 (例如, 123.45.678.9:4022)。 4024 是 Visual Studio 2019 x64 遠端調試器的預設端口。 有關其他遠端調試器端口配置設定,請參閱遠端調試器端口配置設定。
    • 選擇查找按鈕旁邊連接配接目标框,以打開遠端連接配接對話框。 遠端連接配接對話框會列出本地子網上,或直接連接配接到您的計算機的所有裝置。 你可能需要打開 UDP 端口 3702伺服器以發現遠端裝置上。 選擇的計算機或所需的裝置,然後單擊選擇。
    “連接配接類型”設定在調試會話之間保持不變。 而“連接配接目标”設定隻有在成功與該目标建立了調試連接配接時才會在調試會話之間保持不變。
  2. 單擊“重新整理”,填充“可用程序”清單。
    “附加到程序”對話框處于打開狀态時,程序可以在背景啟動和停止,是以正在運作的程序清單可能不總是最新内容。 可随時選擇“重新整理”檢視目前清單。
    • 若要查找所有使用者帳戶下運作的程序,請選擇“顯示所有使用者的程序”複選框。
      如果嘗試附加到不受信任的使用者帳戶擁有的程序,則會出現安全警告對話框确認。 有關詳細資訊請參閱安全警告:附加到不受信任的使用者所擁有的程序可能很危險。以下資訊看上去可疑或者你不确定,如果未附加到此程序。

在某些情況下,在遠端桌面(終端服務)會話中進行調試時,“可用程序”清單時不會顯示所有可用程序。 如果以受限制的使用者帳戶的使用者身份運作 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 排查附加錯誤

 當調試器附加到一個正在運作的程序時,該程序可能包含一種或多種類型的代碼。 可在 “選擇代碼類型” 對話框中顯示并選擇可将調試器附加到的代碼類型。

Visual Studio 調試系列10 附加到正在運作的程式

有時,調試器可以成功連接配接到一種代碼類型,但不能連接配接到另一種代碼類型。如果您嘗試連接配接到遠端計算機上運作的程序,則可能會發生這種情況。遠端計算機可能為某些代碼類型安裝了遠端調試元件,但對其他代碼類型則沒有。如果您嘗試連接配接到兩個或多個程序以進行直接資料庫調試,也會發生此問題。SQL調試僅支援附加到單個程序。

如果調試器能夠附加到某些(但不是所有)代碼類型,您會看到一條消息,辨別哪些類型無法附加。

如果調試器成功附加到至少一種代碼類型,則可以繼續調試該過程。您将隻能調試成功附加的代碼類型。程序中未附加的代碼仍将運作,但您将無法在該代碼上設定斷點,檢視資料或執行其他調試操作。

如果您需要有關調試器無法附加到代碼類型的原因的更多具體資訊,請嘗試僅重新連接配接到該代碼類型。

獲得有關代碼類型未能附加的具體資訊:

  1. 從程序中分離。 上調試菜單中,選擇全部分離。
  2. 重新附加到程序,僅選擇代碼類型未能附加。
    1. 在“附加到程序”對話框,選擇“可用程序”清單中的程序。
    2. 選擇選擇。
    3. 在 “選擇代碼類型” 對話框中,選擇 “調試以下代碼類型” 和未能附加的代碼類型。取消選擇其他代碼類型。
    4. 在中附加到程序對話框中,選擇附加。
    此時,附加将徹底失敗,并且你将收到一條特定的錯誤消息。

其他資訊請參考

  • 調試多個程序
  • 實時調試
  • 遠端調試

成在管理,敗在經驗;嬴在選擇,輸在不學!  貴在堅持!

歡迎關注作者頭條号 張傳甯IT講堂,擷取更多IT文章、視訊等優質内容。

Visual Studio 調試系列10 附加到正在運作的程式

個人作品

1、BIMFace.Community.SDK.NET

     開源位址:https://gitee.com/NAlps/BIMFace.SDK

     系列部落格:https://www.cnblogs.com/SavionZhang/p/11424431.html

     系列視訊:https://www.cnblogs.com/SavionZhang/p/14258393.html

2、ZCN.NET.Common

     開源位址:https://gitee.com/NAlps/zcn.net.common

Visual Studio 調試系列10 附加到正在運作的程式

技術棧

 1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python

 2、jQuery、Vue.js、Bootstrap

 3、資料庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿裡 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮雲溪資料庫 ZNBase

 4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離

 5、架構:領域驅動設計 DDD、ABP

 6、環境:跨平台、Windows、Linux(CentOS、麒麟、統信UOS、深度Linux)、maxOS、IIS、Nginx、Apach

 7、移動App:Android、IOS、HarmonyOS、微信、小程式、快應用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler

 雲原生、微服務、Docker、CI/CD、DevOps、K8S;

 Dapr、RabbitMQ、Kafka、分布式、大資料、高并發、負載均衡、中間件、RPC、ELK;

 .NET + Docker + jenkins + Github + Harbor + K8S;

出處:www.cnblogs.com/SavionZhang

作者:張傳甯   微軟MCP、系統架構設計師、系統內建項目管理工程師、科技部創新工程師。

          專注于微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用權限管理系統、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 雲原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。

          多次參與電子政務、圖書教育、生産制造等企業級大型項目研發與管理工作。

          熟悉中小企業軟體開發過程:需求分析、架構設計、編碼測試、實施部署、項目管理。通過技術與管理幫助中小企業快速化實作網際網路技術全流程解決方案。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

如有問題,可以通過郵件[email protected]聯系。共同交流、互相學習。

如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!