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三种,请选择正确的版本进行安装。该程序可从以下三处获得:

·         微软下载中心:http://www.microsoft.com/downloads/details.aspx?FamilyID=440EC902-3260-4CDC-B11A-6A9070A2AAAB&displaylang=zh-cn

·         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一项确保当前的登录账户存在。

 Visual Studio Remote Debugging Monitor

 

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,均无法成功进行断点调试。

 

四.其他资源:

1.        MSDN关于远程调试的详细介绍:http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx

2.        Web程序的远程调试:http://parthasarathi.netfirms.com/tutorials/Remote%20Debugging%20in%20VS%20Net.html

 

posted @ 2010-12-01 10:41  雨藤  阅读(1371)  评论(0编辑  收藏  举报