Visual Studio C++项目远程断点调试客户现场程序方法

前言

程序开发一个很常见的场景,就是程序在自己本地部署调试明明一点问题都没有,但是部署到客户现场就问题百出,要调试起来还很困难,在自己本地也没有条件复现,很多时候只能靠日志一点点排查和猜测,耗费大量时间精力,最后发现只是因为环境不同,导致的一个很小的问题。

这个问题在工业自动化程序开发更为突出,自己本地没有一整套外部硬件可以测试,但到了实际上机测试,很多问题就暴露出来了,又不能在生产环境的机器上安装整个开发环境,调试过程往往也需要耗费大量时间精力,有些问题更是可能成为玄学问题,只能靠曲线救国或者不停地打补丁式来规避。

其实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的优势是啥也不需要,两边安装完程序即可,免费方便,并且网络好的情况下能实现点对点满带宽传输。劣势是有时候不太稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/267744.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

SparkStreaming在实时处理的两个场景示例

简介 Spark Streaming是Apache Spark生态系统中的一个组件,用于实时流式数据处理。它提供了类似于Spark的API,使开发者可以使用相似的编程模型来处理实时数据流。 Spark Streaming的工作原理是将连续的数据流划分成小的批次,并将每个批次作…

(C语言)函数详解上

(C语言)函数详解上 目录: 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 sqrt 功能 2.2.2 头文件包含 2.2.3 实践 2.2.4 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.…

Redis 命令全解析之 List类型

文章目录 命令RedisTemplate API使用场景 Redis 的 List 是一种有序、可重复、可变动的数据结构,它基于双向链表实现。在Redis中,List可以存储多个相同或不同类型的元素,每个元素在List中都有一个对应的索引位置。这使得List可以用来实现队列…

【计算机网络_应用层】协议定制序列化反序列化

文章目录 1. TCP协议的通信流程2. 应用层协议定制3. 通过“网络计算器”的实现来实现应用层协议定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手写序列化和反序列化3.2.2 使用Json库 3.3 数据包读取3.4 服务端设计3.5 最后的源代码和运行结果 1. TCP协议的通信流程 在之…

oppo手机备忘录记录怎么转移到华为手机?

oppo手机备忘录记录怎么转移到华为手机?使用oppo手机已经有三四年了,因为平时习惯,在手机系统的备忘录中记录了很多重要的笔记,比如工作会议的要点、读书笔记、购物清单、朋友的生日提醒等。这些记录对我来说非常重要,我可以通过…

ElasticSearch搜索引擎使用指南

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型,keyword代表精确值不会参与分词,text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…

独立游戏《星尘异变》UE5 C++程序开发日志1——项目与代码管理

写在前面:本日志系列将会向大家介绍在《星尘异变》这款模拟经营游戏,在开发时用到的与C相关的泛用代码与算法,主要记录UE5C与原生C的用法区别,以及遇到的问题和解决办法,因为这是我本人从ACM退役以后第一个从头开始的项…

【数据结构】知识点一:线性表之顺序表

内容导航 一、什么是线性表?二、什么是顺序表?1、顺序表的概念2、顺序表的结构a. 静态顺序表:使用定长数组存储元素。b. 动态顺序表:使用动态开辟的数组存储。 三、顺序表的接口实现精讲1.接口一:打印数据2.接口二&…

持安科技亮相张江高科895创业营,总评分第三名荣获「最具创新性企业」!

近日,张江高科895创业营(第十三季)信息安全专场Demo day&结营仪式在上海集成电路设计产业园圆满落幕。本季创业营通过多种渠道在海内外甄选优秀创业项目,一共择优录取了29家入营,最终甄选出9家代表参加Demo day路演…

Django后端开发——中间件

文章目录 参考资料中间件注册中间件settings.pymiddleware/mymiddleware.pymysite3/views.pymysite3/urls.py 练习 参考资料 B站网课:点击蓝色字体跳转 或复制链接至浏览器:https://www.bilibili.com/video/BV1vK4y1o7jH?p39&vd_source597e21cf34f…

数据可视化原理-腾讯-热力图

在做数据分析类的产品功能设计时,经常用到可视化方式,挖掘数据价值,表达数据的内在规律与特征展示给客户。 可是作为一个产品经理,(1)如果不能够掌握各类可视化图形的含义,就不知道哪类数据该用…

Mybatis plus扩展功能-Db静态工具

目录 1 前言 2 使用方法 2.1 Db静态工具拥有的部分方法 2.2 举例 1 前言 在我们的服务层中,有时为了实现一个方法需要引入其它的Mapper层方法,但是,这样可能出现循环依赖。虽然Spring已经给我们解决了简单的循环依赖问题,但是…

深入剖析k8s-Pod篇

为什么需要Pod? 进程是以进程组的方式组织在一起。受限制容器的“单进程模型”, 成组调用没有被妥善处理(资源调用有限),使用资源囤积则导致复杂度上升。 在k8s项目中,Pod的实现需要使用一个中间容器——…

web组态(BY组态)接入流程

技术文档 官网网站:www.hcy-soft.com 体验地址: www.byzt.net:60/sm 一、数据流向图及嵌入原理 数据流向 嵌入原理 二、编辑器调用业务流程图 三、集成前需要了解的 1、后台Websocket端往前台监控画面端传输数据规则 后台websocket向客户端监控画面…

基于CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 5…

python自动化之项目架构搭建与思路讲解(第二天)

1.自动化测试的概念 自动化测试是指使用自动化工具和脚本来执行测试任务,以验证软件或系统的正确性和稳定性。它可以提高测试的效率和准确性,并节约时间和成本。 2.自动化脚本编写的思路 xmind文档如有需要,可在资源里自行下载 3.项目代码…

MySQL NDB Cluster 分布式架构搭建 自定义启动与重启Shell脚本

此次NDB Cluster使用三台虚拟机进行搭建,一台作为管理节点;而对于另外两台服务器,每一台都充当着数据节点和SQL节点的角色。注意不是MGR主从复制架构,而是分布式MySQL架构。 创建 /var/lib/mysql-cluster/config.ini Cluster全局…

(面试题)数据结构:链表相交

问题:有两个链表,如何判断是否相交,若相交,找出相交的起始节点 一、介绍 链表相交: 若两个链表相交,则两个链表有共同的节点,那从这个节点之后,后面的节点都会重叠,知道…

灯塔:CSS笔记

CSS&#xff1a;层叠样式表 所谓层叠 即叠加的意思&#xff0c;表示样式可以一层一层的层叠覆盖 css写在style标签中&#xff0c;style标签一般写在head标签里面&#xff0c;title标签下面 <!DOCTYPE html> <html lang"en"> <head><meta cha…