Visual Studio 提供了三种执行远程调试的方法:
- 首选方法使用 DCOM 和计算机调试管理器。有关更多信息,请参见使用 DCOM 和计算机调试管理器进行远程调试。
- 其他两种方法仅适用于本机 C 或 C++ 应用程序。这些方法使用远程调试监视器 (Msvcmon) 以及管道或 TCP/IP。有关更多信息,请参见使用远程调试监视器进行远程调试。
注意
使用 DCOM 设置远程应用程序后,可能需要将调试器用户添加到“Debugger Users”(调试器用户)组或配置 DCOM 以授予用户权限。安装远程调试组件时,安装程序自动将您(正在进行安装的用户)添加到该计算机上的“Debugger Users”组中。如果需要添加其他用户,请参见添加调试器用户和配置 DCOM。
有关所需权限的完整列表,请参见远程调试所需的权限。
注意
注意
使用 DCOM 和计算机调试管理器进行远程调试
对于使用 DCOM 进行的远程调试,必须安装计算机调试管理器 (MDM.exe) 并使其在远程计算机上运行。MDM.exe 以服务的形式运行,并可使用服务控制面板对其进行配置。
有三种安装 DCOM 远程调试的方法。
- 可以在远程计算机上安装 Visual Studio .NET 的完全授权版本。
- 可在远程计算机上运行 Visual Studio 安装程序 CD-ROM 并且在安装向导中选择远程组件安装程序。这将仅安装远程调试组件。选择了远程组件安装程序后,会有两个选项。
本机远程调试,该选项安装的组件使调试器能够建立仅调试本机代码的连接。
完全远程调试,该选项安装的组件使调试器能够建立以下用途的连接:调试本机代码,调试运行在公共语言运行库上的托管代码,以及调试脚本(VBScript 或 JScript)。如果计算机上安装了 SQL Server,则还将安装用于 SQL 远程调试的组件。
有关更多信息,请参见远程组件安装程序。 - 可手动安装本机远程调试所需的最小的一组组件。这些文件是:
msvcmon.exe
msvcr71.dll
natdbgtlnet.dll
natdbgdm.dll
psapi.dll
(仅限 Windows NT 4.0)
若要获得转储支持(有关更多信息,请参见转储),请也安装以下文件:
dbghelp.dll
(支持转储)
可以将所有这些文件复制到远程服务器上的同一位置,也可以从运行 Visual Studio .NET 的本地计算机上的共享运行它们。使用共享使您能够调试运行在您无法安装文件的远程计算机上的应用程序。
计算机调试管理器注册
如果安装了 Windows NT Option Pack 4.0,计算机调试管理器将从注册表中消失。下次尝试用 Visual Studio .NET 进行远程调试时,将显示一个对话框,要求您注册 MDM。有关更多信息,请参见 MDM 注册在安装了 Windows NT Option Pack 4.0 后消失。
使用远程调试监视器进行远程调试
注意 使用远程调试监视器进行远程调试仅适用于本机 C 或 C++ 应用程序的远程调试。
对于使用管道或 TCP/IP 进行的远程调试,必须安装远程调试监视器并使其在远程计算机上运行。远程调试监视器 (Msvcmon.exe) 是一个小的控制台应用程序,它与调试器宿主通信并控制正在调试的程序的执行。此外,远程调试监视器还需要某些支持文件。有关更多信息,请参见远程组件安装程序。
警告
远程调试监视器 (Msvcmon) 可执行文件安装在 Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger 目录中。可从 Windows“开始”菜单或从命令提示处启动远程调试监视器。启动远程调试监视器的命令是:
msvcmon
默认情况下,msvcmon
命令以管道模式启动远程调试监视器。若要改为以 TCP/IP 模式调试,必须使用 -tcpip
选项启动远程调试监视器:
msvcmon -tcpip
可以注册远程调试监视器,以便 Visual Studio .NET 调试器能自动启动它:
msvcmon -register
通过管道进行调试时,可以使用 –s
和 –u
选项。
–s
选项指定调试期间追加到主管道名称后的后缀:
msvcmon -s suffix
如果您要调试在终端服务器上运行的应用程序,而另一个用户同时也在该计算机上进行调试,则可能需要使用 –s
选项。这种情况下,第一个连接的调试器用户获得对管道名的访问,下一个用户必须指定后缀以创建一个唯一的管道名。
–u
选项指定可以连接的用户以及用户从哪个域连接:
msvcmon -u mydomain\myusername
通过 TCP/IP 进行调试时,可以使用 –anyuser
选项、–maxsessions
和 –timeout
选项。
–anyuser
选项允许任何用户使用 TCP/IP 经 Msvcmon 连接调试应用程序:
msvcmon -anyuser
注意
–anyuser
选项使任何具有网络访问权限的用户都可以连接到计算机进行远程调试,这可能会带来严重的安全风险。
–maxsessions
选项使您可以更改 Msvcmon 允许的最大并发 TCP/IP 调试会话数。例如,要将最大并发会话数更改为 6,可以使用:
maxsessions 6
当 Msvcmon 尝试建立 TCP/IP 连接时,它使用一个超时值确定终止尝试前等待连接的时间长度。默认情况下,该值为 900 秒(15 分钟)。您可以用 –timeout
选项和一个以秒为单位的时间值来更改超时值。例如,要将超时值更改为 120 秒(两分钟),可以使用:
timeout 120
如果使用值 -1
运行 Msvcmon,则连接尝试永远不会超时:
timeout -1
还有另外两个可用于管道或 TCP/IP 调试的选项。它们是 -nowowwarn
和 -?
选项。
-nowowwarn
选项取消一个当 mscmon 在 WOW64 模拟器下运行时通常会出现的警告:
nowowwarn
-?
选项列出所有可用的 Msvcmon 选项:
msvcmon -?
注意
远程调试所需的权限
本节列出远程调试所需的最小权限。如果您拥有某个进程,则无需进一步的权限即可调试它。
非托管代码 (C++)
若要调试其他用户的进程,您必须是运行该进程的计算机上的管理员。作为管理员,您可以连接到计算机调试监视器。另外,默认情况下管理员具有操作系统级的 SE_DEBUG_PRIVILEGE。
若要调试您自己的进程,您必须是管理员或“Debugger Users”(调试器用户)组中的成员。
警告
托管代码(C++ 托管扩展、C#、Visual Basic、JScript .NET)
若要调试其他用户的进程,您必须是运行该进程的计算机上的管理员。例如,如果 aspnet_wp.exe 正作为 SYSTEM 或 ASPNET 运行,您必须是管理员才能调试它。
若要调试您自己的进程,您必须是管理员或“Debugger Users”(调试器用户)组中的成员。
警告
T-SQL
您必须具有在数据库上执行 sp_sdidebug()
mssdi98.dll
必须安装在 SQL Server 安装的 Binn
目录中。
在 Windows XP 以前的操作系统上,SQL Server 不能作为“本地系统”运行。