一、背景说明
在进行设备控制软件开发的时候,需要进行设备的上机调试。我们在安装了工作环境(VS2010+Access+流程图等软件)的电脑上编码写好待调试的软件之后,待机器零配件和电气安装好之后,再在设备上进行调试,这个时候,设备会自带自己的工控电脑,这个工控电脑没有安装代码调试的软件。一般的解决办法是,将开发所需要的所有软件在目标工控机上再安装一遍,然后将代码拷贝到目标机,然后在目标机上修改代码和调试代码。这样做有一下几个缺点:
(1)、工作环境搭建很耗时。
目标机需要安装的软件多,VS2010+Access+Visio+Office+SVN等一系列软件,最少需要2个小时的安装时间,时间过久。另外,对于每一个要上机调试代码的目标机,都要搭建一遍工作环境,那是多么蛋疼!
(2)、修改代码效率低
在目标机上安装好开发环境之后,修改代码麻烦。因为在机器上,键盘、鼠标和显示器的安装位置并不适合开发,会导致效率低下。通常为了调试方便,要多余的调试桌子和多余的键盘和鼠标等,可是,现场往往会出现没有这些多余的硬件的场合。
(3)、客户现场解决问题响应慢
特别是新机器的软件,一方面,需要在客户的工厂里面,根据客户的要求,现场修改程序;另一方面,由于是全新的软件,肯定会有逻辑问题要现场调试修改。但是机器发到客户后,往往是没有开发环境的。这个时候,安装工作环境,在客户的目标机上修改代码进行调试,并且在客户生产现场,几乎没有客户会提供你桌子,让你开发和调试的时候更加舒适和高效,通常只能站着,改几句代码。这一切,都会导致在客户现场的解决问题的效率低下。
(4)、代码泄露风险高
通过拷贝的方式将代码拷贝到目标机上,中途往往会有上厕所啊、借个电话等事情,让你暂时离开你的目标机电脑,但是这个时候,代码还在机器上。如果将代码拷贝回来,又很麻烦,如果不拷贝,又有代码被被人拷贝走的风险。要知道,一份比较完整的控制系统软件,是开发团队很长时间的智力结晶!
(5)、拷贝次数多,代码合并麻烦
在目标机器上调试的程序,最终要拷贝回到开发电脑上,并和团队其他人的工作合并,
经常代码迁入和迁出,再进行代码合并,是让人很恼火的。
为了解决上面的问题,必需要有新的方法,必需统一开发电脑和目标调试电脑。而这个方法就是VS2010的远程调试功能,通过开发机直接调试目标机的运行程序,包括VC++程序和C#程序,并且代码只需要呆在开发机。使用VS2010的远程调试功能,我们只需要几个简单的步骤就可以。
二、搭建硬件环境
为了实现Visual Studio的远程调试的工作环境,需要在开发机与目标机之间建立局域网,有以下几种方法:
(1)、一根网线实现局域网
将网线两端分别连接到开发机与目标机,分别设置开发机和目标机IP,使两者在同一网段,且可以ping通。
机器上的工控机都是不联网的,而且网口可能会全部被硬件占用,可通过USB无线网卡接收信号。要注意,这里必须是接收信号,因为USB无线网卡通过USB供电,他的功率不够高。开发机,使用笔记本电脑,用笔记本电脑自带的无线网卡作为局域网发射端。这里建议用笔记本电脑作为发射端,信号比较强。
设置无线网卡作为发射端,很是很麻烦的。我试过几个方法,1、自己通过控制面板->网络连接->无线连接的属性配置无线网络;2、通过猎豹免费WIFI,可以实现一键设置局域网发射端。
(3)、路由器实现局域网。
如果目标机是连接在同一路由器局域网中,那么就可以非常方便的将开发机直接连接到路由器,在局域网中找到对应的目标机即可。
三、设置目标机共享文件
局域网搭好之后,要确保开发机和目标机能相互ping通,并且可以在开发机的网络中找到目标机,这是Visual Studio实现远程调试的前提。同时,因为要将开发机生成的应用程序(.exe)及调试信息(.pdb)部署到目标机中,s所以目标机中需要实现文件读写的共享。这里以win10为例。
(1)、系统共享设置
控制面板->网络和Internet->网络和共享中心->高级共享设置,展开所有网络中,公用文件夹共享为启用,设置完成后,单击保存修改即可。
(2)、文件夹共享设置
右键单击需要共享的文件夹选择属性,点击“共享”,选择“共享”,这里选择“EveryOne” 添加,点击共享退出;再点击下方的“高级共享”,在弹出的窗口中勾选共享此文件夹,权限设置为“完全控制”。
(3)、防火墙
如果上述操作设置后还不能访问我加你,可尝试以下操作。防火墙有可能造成局域网文件的无法访问。进入“网络和共享中心”,单击“Windows的防火墙”,在打开的“Windows的防火墙”窗口中,单击“打开或关闭Windows防火墙”命令, 在打开的窗口中选择“关闭Windows防火墙”选项,单击“确定”保存。
四、设置Visual Studio远程调试
局域网环境搭好之后,就可以进行Visual Studio的设置了,假设开发机为A、目标机为B。Visual Studio安装在A机器上,也就是说A机器是开发使用的机器。B机器是程序运行部署使用的机器。该功能只支持Visual Studio 2010 之后的版本,这里用Visual Studio 2017。
先在B机器上建立共享文件夹,有读写功能,方面复制文件。
(1)Window身份验证的远程调试
带身份验证的远程调试,本人测试过,能对非托管VC等代码进行调试,也能对托管代码和C#程序调试。
1、远程Window调试器
a、在A机器上的vs2017安装目录倒找RemoteDebugger文件夹;
b、默认安装路径下,复制C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger目录到B机器上,可通过共享文件夹的方式;
c、运行B机器中Remote Debugger\x86下的msvsmon.exe文件,注意以管理员身份运行msvsmon.exe;
d、在上图中选择工具中的选项菜单项,可设置端口号及身份验证模式。
e、设置完成后点击OK按钮
到此需要调试的机器B的远程调试器已经设置完毕。
在项目工程属性中,将调试器选择为远程window调试器,如图:A-A11-1765为目标机计算机名,也可用IP地址代替;Debug文件夹为目标机共享文件夹。
程序编译好之后,将.exe和.pdb一并复制到目标机B上,再开发机A上,按下F5就能直接启动B上的执行程序,并进行断点调试。也可以直接在链接器中将生成的应用程序与调试信息生成到目标机的共享文件夹中,更加方便调试。
(2)无身份验证的远程调试
无身份验证的远程调试,经测试,只能对非托管VC等代码进行调试,对托管代码和C#程序无法调试。
设置地方和不带身份验证的远程调试一样,只是设置过程有所变化,设置好后不需要输入目标机的账号密码。
注意:目标机中的RemoteDebugger版本必须与开发机中调试环境保持一致,如: 当RemoteDebugger是VS 2017的32位版本时,VS 2017编译生成的应用程序也需要为32位。