可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程。 进程运行后,在 Visual Studio 中选择“调试” > “附加到进程”,或按 Ctrl+Alt+P,而后使用“附加到进程”对话框将调试器附加到进程。html
可使用“附加到进程” 来调试本地或远程计算机上正在运行的应用、同时调试多个进程、 调试并不是在 Visual Studio 中建立的应用或未使用附带调试器从 Visual Studio 启动的任何应用。 例如,若是运行的是不带调试器的应用,并触发异常,则能够将调试器附加到运行应用的进程并开始调试。ios
若要附加到本地计算机上的进程,请执行如下操做:chrome
在 Visual Studio 中,选择“调试” > “附加到进程”(或按 Ctrl+Alt+P),打开“附加到进程”对话框。数据库
“链接类型”应设置为“默认”。 “链接目标”应该是本地计算机名称。express
在“可用进程”列表中,查找并选择要附加到的一个或多个进程。windows
若要快速选择一个进程,请在“筛选进程”框中键入其名称或首字母。浏览器
若是不知道进程名称,请浏览列表或参阅常见调试方案,了解一些常见的进程名称。安全
“附加到进程”对话框处于打开状态时,进程能够在后台启动和中止,所以正在运行的进程列表可能不老是最新内容。 服务器
可随时选择“刷新”查看当前列表。 app
在“附加到”字段中,确保已列出计划调试的代码类型。 默认的“自动”设置适用于大多数应用类型。
若要手动选择代码类型:
选择“附加”。
可附加到多个应用进行调试,但在调试器中一次只能有一个应用处于活动状态。 可在 Visual Studio 的“调试位置”工具栏或“进程”窗口中设置活动的应用。
还能够在“附加到进程”对话框中选择远程计算机,查看该计算机上运行的可用进程列表,并附加到一个或多个进程以进行调试。 远程调试器 (msvsmon.exe) 必须在远程计算机上运行。 有关详细信息,请参阅远程调试。
用于调试已部署到 IIS 的 ASP.NET 应用程序的更完整说明,请参阅远程调试远程 IIS 计算机上的 ASP.NET。
若要将附加到远程计算机上正在运行的进程:
在 Visual Studio 中,选择“调试” > “附加到进程”(或按 Ctrl+Alt+P),打开“附加到进程”对话框。
在大多数状况下,“链接类型”应为“默认”。 在“链接目标”框中,使用如下方法之一选择远程计算机:
选择下拉箭头旁边的“链接目标”,并从下拉列表中选择计算机名称。
键入中的计算机名称链接目标框,而后按Enter。
验证 Visual Studio 将所需的端口添加到计算机名称,将出如今格式: <远程计算机名称 >: 端口
若是您不能使用远程计算机名称进行链接,请尝试使用 IP 和端口地址 (例如, 123.45.678.9:4022)。 4024 是 Visual Studio 2019 x64 远程调试器的默认端口。 有关其余远程调试器端口分配,请参阅远程调试器端口分配。
选择查找按钮旁边链接目标框,以打开远程链接对话框。 远程链接对话框会列出本地子网上,或直接链接到您的计算机的全部设备。 你可能须要打开 UDP 端口 3702服务器以发现远程设备上。 选择的计算机或所需的设备,而后单击选择。
“链接类型”设置在调试会话之间保持不变。 而“链接目标”设置只有在成功与该目标创建了调试链接时才会在调试会话之间保持不变。
单击“刷新”,填充“可用进程”列表。
“附加到进程”对话框处于打开状态时,进程能够在后台启动和中止,所以正在运行的进程列表可能不老是最新内容。 可随时选择“刷新”查看当前列表。
在“可用进程”列表中,查找并选择要附加到的一个或多个进程。
若要快速选择一个进程,请在“筛选进程”框中键入其名称或首字母。
若是不知道进程名称,请浏览列表或参阅常见调试方案,了解一些常见的进程名称。
若要查找全部用户账户下运行的进程,请选择“显示全部用户的进程”复选框。
若是尝试附加到不受信任的用户账户拥有的进程,则会出现安全警告对话框确认。 有关详细信息请参阅安全警告:附加到不受信任的用户所拥有的进程可能很危险。如下信息看上去可疑或者你不肯定,若是未附加到此进程。
在“附加到”字段中,确保已列出计划调试的代码类型。 默认的“自动”设置适用于大多数应用类型。
若要手动选择代码类型:
选择“附加”。
在某些状况下,在远程桌面(终端服务)会话中进行调试时,“可用进程”列表时不会显示全部可用进程。 若是以受限制的用户账户的用户身份运行 Visual Studio,则“可用进程”列表不会显示在会话 0 中运行的进程。 会话 0 用于服务和其余服务器进程,包括 w3wp.exe。 可经过如下方法解决该问题:使用管理员账户运行 Visual Studio 或从服务器控制台(而不是“终端服务”会话)运行 Visual Studio。
若是这两种解决方法都不可行,第三种方法是经过从 Windows 命令行运行 vsjitdebugger.exe -p <ProcessId>
来附加到进程。 您能够肯定进程 ID 使用tlist.exe。 若要获取“tlist.exe”,请从 WDK 和 WinDbg 下载中下载并安装适用于 Windows 的调试工具。
从新附加到进程命令是从 Visual Studio 2017 开始提供。
为帮助肯定是否使用“附加到进程”以及要附加到的进程,下表显示了一些常见调试方案,并提供了指向更多可用说明的连接。 (该列表并未列出详尽信息。)
对于某些应用类型,如通用 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 应用 | 调试安装的应用包 | 不适用 | 请参阅调试安装的应用包而不是使用附加到进程 |
要在附加到流程时使用Visual Studio调试器的完整功能(如命中断点),应用程序必须与本地源和符号彻底匹配。也就是说,调试器必须可以加载正确的符号(.pdb)文件。默认状况下,这须要调试版本。
对于远程调试方案,您必须已在Visual Studio中打开源代码(或源代码的副本)。远程计算机上编译的app二进制文件必须来自与本地计算机上相同的版本。
在某些本地调试方案中,若是应用程序中存在正确的符号文件,则能够在Visual Studio中进行调试而没法访问源。默认状况下,这须要调试版本。有关更多信息,请参阅指定符号和源文件。
有时,调试器能够成功链接到一种代码类型,但不能链接到另外一种代码类型。若是您尝试链接到远程计算机上运行的进程,则可能会发生这种状况。远程计算机可能为某些代码类型安装了远程调试组件,但对其余代码类型则没有。若是您尝试链接到两个或多个进程以进行直接数据库调试,也会发生此问题。SQL调试仅支持附加到单个进程。
若是调试器可以附加到某些(但不是全部)代码类型,您会看到一条消息,标识哪些类型没法附加。
若是调试器成功附加到至少一种代码类型,则能够继续调试该过程。您将只能调试成功附加的代码类型。进程中未附加的代码仍将运行,但您将没法在该代码上设置断点,查看数据或执行其余调试操做。
若是您须要有关调试器没法附加到代码类型的缘由的更多具体信息,请尝试仅从新链接到该代码类型。
得到有关代码类型未能附加的具体信息:
从进程中分离。 上调试菜单中,选择所有分离。
从新附加到进程,仅选择代码类型未能附加。
在“附加到进程”对话框,选择“可用进程”列表中的进程。
选择选择。
在 “选择代码类型” 对话框中,选择 “调试如下代码类型” 和未能附加的代码类型。取消选择其余代码类型。
选择 肯定。
在中附加到进程对话框中,选择附加。
此时,附加将完全失败,而且你将收到一条特定的错误消息。
其余信息请参考