VS2008远程调试简介
先说明两个概念:
1. 目标机:远程需要调试的机子,也就是被调试程序exe所在的机子,该机子可以安装VS2008或者不安装vs2008;
2. 调试机:安装VS2008的机子,就是存放代码下断点调试的机子,该机子必须安装vs2008;
下面介绍具体设置步骤:
目标机:
1. 如果目标机安装了VS2008,则直接在【开始菜单】->【Microsoft Visual Studio2008】->【VisualStudio Tools】下面找到Visual Studio 2008 RemoteDebugger运行即可;如果目标机没有安装VS2008则需要将调试机上vs2008安装目录下相应的远程debug工具,路径:D:/Program Files/MicrosoftVisual Studio 9.0/Common7/IDE/Remote Debugger/x86拷贝到目标机应用程序所在的目录下,然后运行msvsmon.exe。
注意:此处如果是要根据你的程序是32位或者64位选择不同的版本,如果是在Win7下面还要以管理员身份运行。如果是第一次运行可能需要设置防火墙,请允许防火墙放行。
2. 选择【Tools】->【Options】设置Debugger参数:
这两步后目标机上的设置就完成了,下面介绍调试机上的设置:
调试机:
1. 打开VS2008,打开启动工程属性,在Debugging选项页内,做如下设置:
注意:Remote Command中的路径为目标机上可执行工程的路径;Remote Server Name为目标机的IP地址,设置完成后按F5即可远程调试目标机程序。
需要注意的几个地方:
1. 调试机和被调试机都在一个局域网内,且必须在一个网段;
2. 调试机和被调试机必须登录相同的用户,用户名必须一直关闭防火墙或打开相应的端口,一般是4015;
3. 最重要的一点,这样设置后有可能会出现在调试机上无法设置断点的情况,提示PDB文件不匹配的问题,我就遇到了这个问题,找了好长时间才解决,我的解决方法是在调试机上编译好应用程序后,然后拷贝到目标机上(确保PDB文件一致),并且在你每次在调试机上重新编译了某些库后必须手动拷贝其DLL和PDB文件到目标机上,然后在Remote Command中设置目标机上的路径即可。关于这一条可能还有其他的解决办法,但我没找到,希望有其他的解决方法的朋友留言。
配置方法
(1) 远程端:安装VS2005光盘"X:\vs\RemoteDebugger\x86\ rdbgsetup.exe"。或者直接运行或copy本地端的: "ProgramFiles\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86"
(2) 远程端:“本地安全策略 - 安全选项 - 网络访问:本地帐户的共享和安全模式”改为:经典-本地用户以自己的身份验证。
(3) 远程端:启动Remote Debuger,从“工具 - 选项”中将身份验证模式改为“无身份验证,允许任何用户进行调试”。
或者直接用命令行:"X:\ msvsmon.exe" /noauth /anyuser/nosecuritywarn,可以建个快捷方式以方便运行。如下图:
(4) 本地:在VS2005中,“工具”--“附加到进程”,传输选“远程”,限定符输入远程端的主机名或IP地址,回车,终于出来了可爱的进程列表。
**************************附:
启动本地安全策略:
1.单击“控制面板”--“系统和安全”--“管理工具”--“本地安全策略”,会进入“本地安全策略”界面。
2.开始--搜索“运行”--secpol.msc,同样打开“本地安全策略”。
3.win+R--secpol.msc,也可以。
VS2008进行双机调试(远程调试)
准备工作:
1.拷贝C:\Program Files\Microsoft Visual Studio9.0\Common7\IDE\Remote Debugger\x86目录到被调试机
2.主机,被调试机的本地安全策略(gpedit.msc)修改成"经典,本地用户以自己的身份验证"
3.关闭防火墙或打开相应的端口,一般是4015
具体有2种调试方法:
匿名调试:
被调试机的msvsmon下选择option,点击No Authenritaion(native only),在主界面可以看到类似:YYY1:4015
主机打开VS,选择Attach to process
Transport选择Remote (native only No Authenritaion)
Qulifier选择YYY1:4015,之后刷新就可以看到进程列表了
密码验证调试:
这种方法需要主机和被调试机的用户名和密码完全一致,所以还是第一种方法实用.
被调试机的msvsmon下选择option,点击Windows Authentication,在主界面可以看到类似:Administrator@:YYY1
主机打开VS,选择Attach to process
Transport选择Default
Qulifier选择,之后刷新就可以看到进程列表了
远程调试C# WinForm程序
【计算机配置】
0. 系统需求
本地:本地计算机包含所有的源代码,VS要安装;
远程:如图所示。
1. 操作步骤
选择Tools|Permission|在组或用户名称中添加需要进行远程的计算机的名称;
注意:本地和远程的两个计算机必须使用相同的帐户进行登录。
选择Tools|Option|,一定要选择“Windows Authentication”;
注意:测试的时候本地和远程都加入同一域,不知道不加入域能不能连上,没有测试。
【解决方案】
方法一:
1. 打开项目的属性页;
2. 定位到Debug标签;
※ Start Action:选择“Start external program”为
\\172.25.145.51\debug\Walkthrough_SimpleDebug.exe
(此处填写地址的含义是:远程计算机的exe文件,此目录需要完全共享)
※ Start Options:WorkingDirectory选择\\172.25.145.51\debug
※ Use remote machine:172.25.145.51
此时,F5就可以调试远程的程序了
方法二:绑定进程法
打开VS2008,选择Debug---Attach to Process
【测试环境】
本地:WinXP SP2+VS2008 ENU
远程Win2003
1. 附加进程调试又分为两种:
(1)Window身份验证远程调试 (2)匿名远程调试
1. Windows身份远程调试在调试主机上VS里的附加进程要用默认模式,这里请注意不要被远程模式的字面意思欺骗了,“远程(无身份验证时仅限本机)”这个模式实际上指的是匿名远程调试需要输入被调试的主机名和端口号
2. Windows身份验证远程调试必须要在调试机和被调试机上使用相同用户名和密码的Windows账户,这样做是为了验证调试机的身份。
3. 将远程调试作为被调试机的服务可以免除“Windows身份验证远程调试必须要在调试机和被调试机上使用相同用户名和密码的Windows账户”这个限制,因为在设置windows服务的时候会要求输入允许进行调试的机器的登录名和密码,只要调试者在他的系统上使用该用户名和密码就可以使用远程调试。
4. 直接远程调试只支持VisualStudio 远程调试器上的windows身份验证调试模式,不支持将远程调试作为被调试机的服务和匿名远程调试
5. 使用匿名远程调试有个问题,附加进程上的被调试机进程没有用户名,导致VS上设置的断点全不起作用,感觉匿名远程调试如同虚设.....至今没有找到解决办法........
6. 使用匿名远程调试的时候如果在msvsmon上没有选择“允许任何用户进行调试”复选框,那么仍然有:“调试机和被调试机上使用相同用户名和密码的Windows账户”这个限制,但是就算是在匿名远程调试下使用相同的用户名和密码你还是会发现附加进程里出现的被调试机进程还是没有用户名,这仍然说明设置断点不起作用
2. 设置
前提条件:
调试机和被调试机都在一个局域网内,且必须在一个网段;
调试机和被调试机必须登录相同的用户,用户名必须一直关闭防火墙或打开相应的端口,一般是4015;
调试机和被调试机的本地安全策略中的网络访问必须改为“经典,本地用户以自己的身份验证”,路径为控制面板->用户管理->本地安全设置->本地策略->安全选项->网络访问
调试方法:
至此有2种调试方法:一种是匿名调试,无需验证,一种是Window身份验证调试:
匿名调试:
1.被调试机的msvsmon下选择工具->选项,点击无身份验证模式(只限本机)
2.之后可以看到主机名和IP,一般是hostname:4015的形式
3.调试机打开VS,选择附加到进程
4.传输选择远程(无身份验证时仅限本机)
5.限定符选择hostname:4015,之后刷新就可以看到进程列表了
Window身份验证调试:这种方法需要调试机和被调试机的用户名和密码完全一致
1.被调试机的msvsmon下选择工具->选项,点击windows身份验证
2.调试机打开VS,选择附加到进程
3.传输选择默认
4.限定符选择username@:hostname,之后刷新就可以看到进程列表了