Visual Studio附加到运行进程
Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程。 可以使用此附加功能执行以下操作:
-
调试并非在 Visual Studio 中创建的应用程序。
-
同时调试多个进程。 也可以通过在单个解决方案内启动多个项目来调试多个进程。
-
调试正在远程计算机上运行的进程。
-
调试一个 DLL,该 DLL 运行在不易从 Visual Studio 启动的独立进程上。例如,与 Internet 信息服务一起运行的服务或 ISAPI DLL。
-
当一个进程在 Visual Studio 外运行时发生崩溃时,将自动启动调试器。 这就是实时调试。
一旦附加到某个程序,就可以使用调试器执行命令、检查程序状态,等等。 有关更多信息,请参见 Execution 控件 和 查看调试器中的数据。 当然,检查程序的能力可能会受到某些限制,这取决于程序是否用调试信息生成,是否可以访问程序源代码,以及公共语言运行时 JIT 编译器是否在跟踪调试信息。
如何:附加到运行进程
-
在“调试”菜单上选择“附加到进程”。 如果没有打开任何项目,请从“工具”菜单上选择“附加到进程”
。 -
在“附加到进程”对话框中的“可用进程”列表中,找到要附加到的程序。
-
如果要调试的程序运行在另一台计算器上,必须首先选择该远程计算机。
-
如果进程在其他用户帐户下运行,请选中“显示所有用户的进程”复选框。
-
如果是通过“远程桌面连接”连接,请选中“显示所有会话中的进程”复选框。
-
-
在“附加到”框中,确保待调试的代码类型已经列出。 默认的“自动”设置尝试确定要调试的代码类型。 如果自动设置不合适:
-
单击“选择”。
-
在“选择代码类型”对话框中,单击“调试以下代码类型”,然后选择要调试的类型。
-
单击“确定”。
-
-
单击“附加”。
打开“进程”对话框时,会自动显示“可用进程”列表。 在该对话框打开时进程可以在后台启动和停止。 不过,内容并非总是最新的。 通过单击“刷新”,可以随时刷新列表以查看当前进程列表。
调试时可以附加到多个程序,但在任何时间,调试器中都只有一个程序处于活动状态。 可以在“调试位置”工具栏或“进程”窗口中设置活动程序。 所有的“调试”菜单执行命令都会影响活动程序。 可以在“进程”对话框中中断任何已调试的程序,或者通过“调试”*菜单中断所有附加的程序。
注意:为了使调试器附加到用 Visual C++ 编写的托管代码,该代码需要发出 DebuggableAttribute。 可通过链接 /ASSEMBLYDEBUG 链接器选项将它自动添加到代码中。如果尝试附加到不受信任的用户帐户拥有的进程,则会出现安全警告对话框确认。
在某些情况下,在“远程桌面”(“终端服务”)会话中进行调试时,“可用进程”列表不会显示所有可用进程。 在 Windows Server 2003 或更高版本中,如果您以具有有限用户帐户的用户身份运行 Visual Studio,“可用进程”列表将不显示在会话 0 中运行的进程,会话 0 用于服务与其他服务器进程,包括 w3wp.exe。 您可以通过以下方法解决该问题:使用管理员帐户运行 Visual Studio 或从服务器控制台而不是“终端服务”会话运行 Visual Studio。 如果这两种解决方法都不奏效,第三种方法是通过从 Windows 命令行运行 vsjitdebugger.exe -p 进程Id 来附加到进程。 您可以使用 tlist.exe 来确定进程 ID。 若要获取 tlist.exe,请从 http://go.microsoft.com/fwlink/?LinkId=168279 下载并安装 Windows 调试工具。
如何:附加到脚本
1、首先是弹出附加进程框
2、单击要附加到的进程
3、在“附加到”框中,您应该会看到“脚本代码”或“自动: 脚本代码”。 如果显示其他内容,请按照下列步骤操作:
-
单击“选择”。
-
在“选择代码类型”对话框中单击“调试以下代码类型”,再选择“脚本”。
-
单击“确定”。
4、单击“附加”。
如何:设置当前进程
调试时可以附加到多个进程,但在任何给定时间,调试器中只有一个进程处于活动状态。 可以在“调试位置”工具栏中设置活动进程。
-
在“调试”菜单上,单击“窗口”,再选择“进程”。
“进程”窗口可能已经显示出来。
-
在“进程”窗口中,双击要作为活动进程的进程。
- 或 -
在“调试位置”工具栏上,选择“进程”列表框,然后选择要作为当前进程的进程。
如何:分离进程
“分离”可使调试器断开与程序的连接,该程序已附加到调试器或已从调试器启动。
同时与所有程序分离
在“调试”菜单上,单击“全部分离”。
如果分离所有进程,调试器会话将自动结束。
分离单个进程
如何:处理附加错误
当 Visual Studio 调试器附加到一个正在运行的进程时,该进程可能包含一种或多种类型的代码。 调试器能够附加到的代码类型包括本机、托管、SQL 和脚本。 在**“附加到进程”**对话框中显示并选择这些代码类型。
有时,调试器能够成功附加到一种代码类型,但不能附加到另一种代码类型。 这种情况可能发生在您尝试附加到远程计算机上运行的进程时, 原因是远程计算机上可能安装了一些代码类型的远程调试组件,但没有安装另一些代码类型的远程调试组件。 这种情况还可能发生在您尝试为直接数据库调试附加到两个或多个进程时。 SQL 调试仅支持附加到单个进程。
如果调试器能够附加到某些代码类型而不是所有代码类型,您将看到一条消息,指示无法附加的类型。
如果调试器成功地附加到至少一种代码类型,您就可以继续调试进程。 您只能调试那些已被成功附加的代码类型。 上面的示例消息说明未能附加脚本代码类型。 因此,您将不能调试进程内的脚本代码。 进程内的脚本代码将继续运行,但无法设置断点、查看数据或在脚本中执行其他调试操作。
如果想了解有关调试器未能附加到某种代码类型的详细原因,可以尝试仅重新附加到该代码类型。
获得有关某种代码类型未能附加的详细原因
-
从进程中分离。 为此,请在“调试”菜单上,单击“全部分离”。
-
仅选择一种程序类型,再次附加到进程。
-
在“附加到进程”对话框的“可用进程”列表中选择进程。
-
单击“选择”。
-
在“选择代码类型”对话框中,选择“调试以下代码类型”和未能附加的代码类型。 清除任何其他代码。
-
单击“确定”。 “选择代码类型”对话框关闭。
-
在“附加到进程”对话框中,单击“附加”。
此时,附加将彻底失败,并且您将收到一条特定的错误消息。
-