VS2010远程调试你的程序vc++/wpf/C#/MFC
1 背景说明
VS2010远程调试你的程序vc++/wpf/C#/MFC
1 背景说明
在进行设备控制软件开发的时候,需要进行设备的上机调试。我们在安装了工作环境(VS2010+Access+流程图等软件)的电脑上编码写好待调试的软件之后,待机器零配件和电气安装好之后,再在设备上进行调试,这个时候,设备会自带自己的工控电脑,这个工控电脑没有安装代码调试的软件。一般的解决办法是,将开发所需要的所有软件在目标工控机上再安装一遍,然后将代码拷贝到目标机,然后在目标机上修改代码和调试代码。这样做有一下几个缺点。
(1)、工作环境搭建很耗时。
目标机需要安装的软件多,VS2010+Access+Visio+Office+SVN等一系列软件,最少需要2个小时的安装时间,时间过久。另外,对于每一个要上机调试代码的目标机,都要搭建一遍工作环境,那是多么蛋疼!
(2)、修改代码效率低
在目标机上安装好开发环境之后,修改代码麻烦。因为在机器上,键盘、鼠标和显示器的安装位置并不适合开发,会导致效率低下。通常为了调试方便,要多余的调试桌子和多余的键盘和鼠标等,可是,现场往往会出现没有这些多余的硬件的场合。
(3)、客户现场解决问题响应慢
特别是新机器的软件,一方面,需要在客户的工厂里面,根据客户的要求,现场修改程序;另一方面,由于是全新的软件,肯定会有逻辑问题要现场调试修改。但是机器发到客户后,往往是没有开发环境的。这个时候,安装工作环境,在客户的目标机上修改代码进行调试,并且在客户生产现场,几乎没有客户会提供你桌子,让你开发和调试的时候更加舒适和高效,通常只能站着,改几句代码。这一切,都会导致在客户现场的解决问题的效率低下。
(4)、代码泄露风险高
通过拷贝的方式将代码拷贝到目标机上,中途往往会有上厕所啊、借个电话等事情,让你暂时离开你的目标机电脑,但是这个时候,代码还在机器上。如果将代码拷贝回来,又很麻烦,如果不拷贝,又有代码被被人拷贝走的风险。要知道,一份比较完整的控制系统软件,是开发团队很长时间的智力结晶!
(5)、拷贝次数多,代码合并麻烦
在目标机器上调试的程序,最终要拷贝回到开发电脑上,并和团队其他人的工作合并,
经常代码迁入和迁出,再进行代码合并,是让人很恼火的。
为了解决上面的问题,必需要有新的方法,必需统一开发电脑和目标调试电脑。而这个方法就是VS2010的远程调试功能,通过开发机直接调试目标机的运行程序,包括VC++程序和C#程序,并且代码只需要呆在开发机。使用VS2010的远程调试功能,我们只需要几个简单的步骤就可以。
2 搭建硬件环境
为了实现VS2010的远程调试的工作环境,需要有一个功率比较高的USB无线网卡给工控机接收信号,有以下几步
(1)、搭建目标机和开发机的局域网。
机器上的工控机都是不联网的,而且网口可能会全部被硬件占用,不一定够用。为此,开发中专门配置USB无线网卡,通过该USB无线网卡接收信号。要注意,这里必须是接收信号,因为USB无线网卡通过USB供电,他的功率不够高。
开发机,使用笔记本电脑,用笔记本电脑自带的无线网卡作为局域网发射端。注意,必须是笔记本电脑作为发射端,因为笔记本电脑是220V的电源,发射无线信号是很强大的。
笔记本电脑作为发射端,比用工控机USB无线网卡做发射端,二者的局域网信号强弱差4格。笔记本发射是满格,而USB无线网卡发射是1格!本人亲测!
(2)、猎豹免费wifi
设置无线网卡作为发射端,很是很麻烦的。我试过几个方法,1、自己通过控制面板->网络连接->无线连接的属性配置无线网络,发现很难搞,不一定能成;2、通过360的免费wifi软件设置,发现这些软件只能在电脑连接互联网的情形下,才能使无线网卡发射信号;3、最后试了猎豹免费WIFI,发现这是个好东西,可以一键设置局域网发射端,不需要电脑连接互联网。
|
|
另外,如果开发机和目标机都在统一的路由器的局域网中,那么二者可以都不做发射端,都只做接收端就可以。
3、设置开发机和目标机能共享文件
局域网搭好之后,要确保开发机和目标机能相互ping通,并实现文件读写共享,这是VS2010远程调试的前提。
(1)、XP系统的文件共享
1、“我的电脑-工具-文件夹选项-查看”:去掉“使用简单文件共享(推荐)”前的勾;然后设置共享文件夹,并设置共享权限;接着指定共享文件夹用户权利;
2、“右键网上邻居-右键本地链接-属性”:启用“Microsoft网络客户端”;启用“Microsoft网络的文件和打印机共享”;安装NetBIOS网络协议;双击“TCP/IP协议”为每台电脑指定同一网段的静态IP地址及网关;接着点击“高级-设置”关闭Windows自带防火墙;
3、“右键我的电脑-管理-服务和应用程序-服务”:在右窗中确保“Computer Browser”服务没有被停止或禁用;
4、“控制面板-管理工具-本地安全策略-本地策略”:“用户权利指派”-“从网络访问此计算机”中加入Guest帐户;“拒绝从网络访问这台计算机”中删除Guest帐户;“安全选项”-把“网络访问:本地帐户的共享和安全模式”设为“典-本地用户以自己的身份验证”;
5、最后,右键单击你需要共享的文件夹,然后选择“共享”,并设置好相应权限。
(2)、win7如何共享文件
1:设置网卡参数
进入控制面板选择“查看网络状态和任务“,选择更改适配器设置,进入本地网络设置。在使用的本地连接上点击右键选择属性,在弹出的界面中双击“Internet协议版本4”进入网络参数设置。
设置网卡参数
2:打开Win7共享设置
在“打开网络和共享中心”界面中单击左侧的“更改高级共享设置”,打开“高级共享设置”窗口,
设置网络发现,文件和打印机共享,公用文件夹共享为启用,关闭密码保护共享,设置完成后,单击保存修改即可。
更改文件共享设置
3:开启Win7文件夹共享功能
右键单击需要共享的文件夹选择属性,选择“共享”,再点击下方的“高级共享”,在弹出的窗口中选择共享此文件夹。
设置文件夹共享
4:关闭Win7防火墙
防火墙有可能造成局域网文件的无法访问。进入“网络和共享中心”,单击“Windows的防火墙”,在打开的“Windows的防火墙”窗口中,单击“打开或关闭Windows防火墙”命令,
在打开的窗口中选择“关闭Windows防火墙”选项,单击“确定”保存。
关闭防火墙
5:启用Win7文件夹共享规则
防火墙关闭后,在“防火墙设置”界面左边的“高级设置”中,在“入站规则”和“出站规则”这两个规则中分别找到“文件和打印机共享”选项,并且将其全部选项设定成“启用规则”。
6:设置Win7文件共享权限
Windows7中要实现文件共享还需要设置文件夹的共享权限。查看共享文件的属性,随后切换到“共享”选项卡里,单击“高级共享”,打开“高级共享”对话框,在“权限”中依次单击“添加”→“高级”→“立即查找”。然后在查找的结果中选择“Everyone”,并且根据需要设置好用户的操作权限。
7:打开Win7 NTFS格式文件权限
Windows7中我们使用的磁盘格式为NTFS,还需要设置NTFS格式的权限。右键单击需要共享的文件夹,依次选择“属性”→“安全”,在“组或用户名”栏点“编辑”,再点“添加”,在“输入对象名称来选择”中输入“Everyone”点“确定”即可。
8、“控制面板-管理工具-本地安全策略-本地策略”:“用户权利指派”-“从网络访问此计算机”中加入Guest帐户;“拒绝从网络访问这台计算机”中删除Guest帐户;“安全选项”-把“网络访问:本地帐户的共享和安全模式”设为“典-本地用户以自己的身份验证”;
4 VS2010的远程调试
局域网环境搭好之后,就可以进行VS2010的设置了,假设开发机为A、目标机为B。VS2010安装在A机器上,也就是说A机器是开发使用的机器。B机器是程序运行部署使用的机器。
先在B机器上建立共享文件夹,有读写功能,方面复制文件。
(1)不带身份验证的远程调试
不带身份验证的远程调试,本人测试过,只能对非托管VC等代码进行调试,对托管代码和C#程序无法调试。
1、在B机器的上开启远程调试器
a、在A机器上的vs2010安装目录倒找Remote Debugger文件夹。如下图:
b、复制C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger目录到B机器上,(通过共享文件夹的方式)。
c、运行B机器中Remote Debugger\x86下的msvsmon.exe文件如下图:(注意以管理员的程序运行msvsmon.exe)
d、在上图中选择Tools中的Options菜单项,如下图:
e、在弹出的对话框中按照下列方式进行设置,如下图:
f、设置完成后点击OK按钮
到此需要调试的机器B的远程调试器已经设置完毕。
2、将执行程序复制到B机器
将.exe和.pdb文件一起复制到B机器上,pdb文件包括的调试信息,一定要复制。
3、开发机A机器的工程设置
在A机器上打开MotorTest.exe对应的源码(注意源码必须与MotorTestexe保持一致,本文只给出调试方法,例子中代码无任何逻辑)。可以通过附加到进程进行调试,也可以设置工程属性直接调试。一般而言,附加到进程是目标机上的执行程序已经在运行了,需要调试其运行状态的时候才用。工程属性直接调试,则修改代码之后,直接启动工程,就能在目标机上运行程序。
a.附加到进程的调试设置
在8中选择Debug菜单中的Attach to Process子菜单项,如下图:
弹出如下对话框:
10、在Transport中选择:Remote(Native onlywith no authentication)选项,并在Qualifier中输入IP地址,192.168.1.129.如下图
点击Refresh按钮,就可以看到B机器上的进程列表了。在进程列表中找到我们需要调试的的进程MotorTest.exe并选中
12、选择需要调试的进程后,单击Attach,就可以调试B机器上的程序。
b.工程属性直接调试
工程属性,将调试器选择为远程window调试器,按照上图进行设置,注意IP设置成目标机的IP地址。程序编译好之后,将.exe和.pdb一并复制到目标机B上,再开发机A上,按下F5就能直接启动B上的执行程序,并进行调试。
(2)带身份验证的远程调试
带身份验证的远程调试,本人测试过,能对非托管VC等代码进行调试,也能对托管代码和C#程序调试。
设置地方和不带身份验证的远程调试一样,只是设置过程有所变化。
前提条件:
(1)将目标机B上的操作系统的用户名和密码与开发机A上的用户名及密码保持一致。
(2)在目标B机上建立一个与开发机执行程序一致的路径,并只能将A机器编译好的执行程序放在B机器的相同目录下。
例如:在开发A机器上,
工程编译后的执行程序目录为
这个时候,必须在B机器上相同的目录,放执行程序
远程调试的步骤:
第1步:启动B机器的远程调试器Remote Debugger。启动之后,不要做任何操作即可。
第2步:设置工程属性,如图
注意:远程服务器名称为用户名@机器名。这个设置可以在B机器上的Remote
Debugger启动之后看的到。然后选择带window身份验证的访问即可。远程服务器名称如下图
第3步:对于C#和WPF的远程调试
只需要设置一下远程计算法的名称。