前言
程序开发一个很常见的场景,就是程序在自己本地部署调试明明一点问题都没有,但是部署到客户现场就问题百出,要调试起来还很困难,在自己本地也没有条件复现,很多时候只能靠日志一点点排查和猜测,耗费大量时间精力,最后发现只是因为环境不同,导致的一个很小的问题。
这个问题在工业自动化程序开发更为突出,自己本地没有一整套外部硬件可以测试,但到了实际上机测试,很多问题就暴露出来了,又不能在生产环境的机器上安装整个开发环境,调试过程往往也需要耗费大量时间精力,有些问题更是可能成为玄学问题,只能靠曲线救国或者不停地打补丁式来规避。
其实Visual Studio有一个完美的方法来应对这样的场景,就是远程调试,可以让你在自己电脑上通过Visual Studio,远程连接到实际的生产设备上。
说白了就是代码和开发环境在你电脑上,执行文件和运行环境在生产设备上。生产环境运行时出现问题,会通过远程调试软件把错误信息发到你的Visual Studio上,从而实现原本只能在自己电脑上的各种调试方法,包括断点调试,单步调试和异常中断等。
步骤
使用起来也很简单,方法和安装文件在以下链接
Remote Debug a C++ Project - Visual Studio (Windows) | Microsoft Learn
选择并下载你的Visual Studio 对应版本的远程调试工具,这里我选择2019版
下载后,在生产设备上安装,设置好防火墙,开启调试工具
顺利的话开启后界面是这样的
然后将你的部署文件复制到生产设备上。
在你自己的Visual Studio上,右键对应的项目,点击【属性】-【配置属性】-【调试】-【要启动的调试器】,选择【远程windows调试器】。
【远程命令】填生产设备上要启动的exe路径。
【工作目录】选择生产设备上部署文件的目录。
【远程服务器名称】填远程调试器启动的服务器名+端口。
设置完是这样的。
选择【远程Windows调试器】,输入生产设备的用户名密码即可开始远程调试。
需要注意的是,本地代码改动后,需要把生成的文件覆盖到生产环境上,再开始调试。
这一步Visual Studio似乎也支持自动部署过去,但是勾选的选项是暗的,暂时还没去进一步研究如何自动部署。
拓展
在局域网环境内进行远程调试,只要防火墙配置好,不需要更多对网络进行配置,即开即用即可。
如果需要跨越公网到客户现场,远程进行调试,理论上也是可行的。
首要前提是客户现场能连上网络。实在不行临时用随身wifi连一下,这个问题不大。
齐次的是需要进行内网穿透,这个可以结合frp或者Zerotier之类的内网穿透工具,理论上也是可行的。
frp的优势是开源,稳定可控,甚至可以整合到自己开发的程序里。但是劣势是需要自己有一台有公网IP的云服务器,需要自己稍微配置下。
Zerotier的优势是啥也不需要,两边安装完程序即可,免费方便,并且网络好的情况下能实现点对点满带宽传输。劣势是有时候不太稳定。