VS.NET远程调试
我们时常听到开发人员抱怨:“这缺陷在我机器上重现不了啊!”。在如下这几种情形下,定位和解决这样的缺陷显得非常麻烦:
· 开发环境搭建起来非常麻烦,如需要安装庞大的开发工具包,像VS.net系列软件。
· 不能破坏测试机纯净的系统环境,即使问题最终能解决,你总不能要求用户也装一个开发环境吧。
· 真实的应用环境在服务器上,如web服务器,这种硬件和软件环境的搭建受很多外围因素制约。
如果程序是用VS.net环境开发的话,那么其自带的远程调试(Remote Debugging)功能为解决上述问题提供了很好的解决方案。
本文只介绍远程调试exe型应用程序的实施步骤,其他如web程序远程调试请参看其他相应文章,方法基本类同。
一.准备工作
假定装有开发环境的本地机器用local表示,远程需要调试的机器用remote表示。
1. 确保local和remote机器能相互访问,此访问等级是文件夹级别的。如果操作系统是WinXP,请将访问安全策略从guest改为classic(控制面板->管理工具->本地安全策略->本地策略->安全选项->网络访问:本地账号共享与安全模型)。某些时候开启的防火墙会引起比较大的访问问题,建议将防火墙关闭。
2. 确保local和remote机器当前系统登录的账号和密码一样。在此说明以下三种情况:
· 同工作组中的两个系统:创建等同账户并用其登录。
· 同域中的两个系统:用同一域账号登录两个系统。
· 工作组和域中的两个系统:在工作组的系统中创建等同域账号的用户名和密码,并用其登录。
3. 在remote机器上安装Visual Studio Remote Debugging Monitor应用程序。其版本分为x86,x64,ia64三种,请选择正确的版本进行安装。该程序可从以下三处获得:
· VS.net 的光盘或镜像中Remote Debugger文件下的rdbgsetup.exe文件
· 将开发环境中msvsmon.exe程序(路径为VS Install Path\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86\msvsmon.exe)所在的目录进行共享,在remote机器上直接运行该程序即可(无需拷贝到remote本地)
二.程序配置:
1. 在remote机上启动Visual Studio Remote Debugging Monitor应用程序。选择菜单Tools->Options->Authentication mode ,选择Windows Authentication,后面的Permission button所引出的Permission for Remote Debugging 对话框中Group or user name一项确保当前的登录账户存在。
2. 将local需要调试的exe文件拷贝到remote机上任意文件夹。注意,一定要将exe同级别的pdb文件一并拷过去,否则将无法启动单步调试。这里假设拷贝后目录为E:\RemoteDebug\ RemoteDebug.exe。确保exe文件所在的父文件夹处于local机可访问状态,即可将上述E:\RemoteDebug目录共享,只读即可。
3. 在VS.net开发环境(本文采用的是VS.net 2008)启动远程单步调试有两种方式:
方法一:属性设置法
· 在IDE中的资源管理器中右键选择项目属性,出现属性配置框,选择Debug 页。
· 在Start Action一项中选择Start external program,并在右侧的文本框中填写上remote机上的被调试程序的绝对路径(图中10.162.22.82为远程主机IP地址)。
· 在Start Options一项中working directory的文本框中填写remote机上被调试程序所在的目录的绝对路径。选择多选按钮Use remote machine,并填写远程主机名或IP。如果被调试程序启动时需要添加运行参数,那么在Command line argument一栏中填写。
· 如果被调试程序含有非托管代码,请将Enable Debuggers一项中的Enable unmanaged code debugging多选框选上。
· 启动IDE中的Debug,remote机上的被调试程序将自动运行起来,并在local的代码断点处停止运行。
方法二:进程注入法
· 在IDE中选择菜单Tools->Attach to Process,出现如上对话框。
· 在Transport一项中选择Default。
· 在Qualifier一项中填写Visual Studio Remote Debugging Monitor中所示的“用户@机器名”,如果成功连接remote机,那么Available Process列表中会出现remote机上对应的进程。请确保remote机上被测试程序已预先成功启动。
· 在进程列表中选择被调试程序进程,点击Attach按钮,Local IDE将自动进入Debug状态,并在代码断点处停止运行。
三.异常情况:
1. Remote和Local机请尽可能使用同一种的操作系统。先前试验过Remote机是WinXP,Local是Win7,均无法成功进行断点调试。
2. 下面这些很重要。如你在不同的域中DEBUG那么就必须要建两个本地帐户密码一致的才行。这个我试了一天时间才搞定的。
下表显示了帐户可以访问计算机。
计算机设置 | 本地系统帐户 | 域帐户 | 在两台计算机上都使用相同的用户名和密码的本地帐户 |
---|---|---|---|
两台计算机上相同的域 | 是 | 是 | 是 |
两台计算机上具有双向信任的域 | 否 | 否 | 是 |
在 $ 工作组上的一个或两个计算机 | 否 | 否 | 是 |
在不同域上的计算机 | 否 | 否 | 是 |
四.其他资源:
1. MSDN关于远程调试的详细介绍:http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx
2. Web程序的远程调试:http://parthasarathi.netfirms.com/tutorials/Remote%20Debugging%20in%20VS%20Net.html
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/roger_ge/archive/2010/03/17/5389614.aspx
正面猛男