Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何优雅的远程自动同步和远程调试c++?

如何优雅的远程自动同步和远程调试c++?

作者头像
腾讯云TStack
发布于 2019-10-25 02:40:18
发布于 2019-10-25 02:40:18
4.2K00
代码可运行
举报
运行总次数:0
代码可运行

/ 机智的小熊 /

一个不愿意透露姓名的工程师,热爱读书,写文章,热爱交流,期待认识更多的大佬。

摘 要

在linux上用vim写C++的时候,通常用gdb进行调试,不能随心所欲的看代码和跳转代码以及加watch(也有可能是因为我还没有get正确的使用方法)。为此我发现Clion可以做到自动同步本场代码或自己下载远程代码同步到本地,以及调试在远程机器上运行的代码,分享给大家。

一、简 介

CLion是一款专为开发 C 及 C++ 所设计的跨平台 IDE。它是以 IntelliJ 为基础设计的,包含了许多智能功能来提高开发人员的生产力,从而提升工作效率 。

二、环境准备

  • 操作系统:macOS / Windows
  • IDE: CLion
  • 源码路径:Node Master

三、自动同步

1)打开CLion的设置,进入到 Preferences | Build, Execution, Deployment | Deployment

2)点加号,添加一个远程配置

3)设置为SFTP协议,设置远程ip、port、pass然后点击Test Connection,确认是否连接成功

1)切换到Mappings

2)设置本地的代码根目录Local path

3)设置远程的代码根目录 Deployment path

1)上传一个文件

2)Upload是上传,Download是下载,本地与远程所映射的目录我们在上面设置过了

上传成功

runlvm.sh文件更新成功,现在的时间是3月18 21:42

1)在Tool - Deployment - Automatic Upload(always) 设置为自动同步

2)自动同步的话可以在每次在本地改动代码的时候自己同步了

3)Sync with Deployed to 就是自动下载远程代码到本地

手动上传整个项目

上传成功,上传了100个文件

查看远程目录,确实成功了;好了,现在只要在本地有任何的改动都会自动同步到远程了。

四、远程调试

1、CentOS的依赖依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cmake
yum install cmake -y

# gcc & gdb
yum install gcc-c++ -y
yum install gdb -y

#gdbserver
yum install gdb-gdbserver -y

2、添加GDB Remote Debug

本地克利翁配置

1)添加一个GDB远程调试的配置 GDB Remote Debug

2)设置远程访问参数(target remote args):tcp:xx.xx.xx.xx:1234

3)设置远程路径和本地路径的映射(Path mappings)

4)远程调试连接成功后,像本地调试一样,可以设置断点,单步跟踪等

5)调试需要本地和远程的代码一致

3、两个方法设置远程配置

方法1—— 远程gdbserver的启动

远程调试依赖gdbserver的来支持,通过gdbserver的启动的程序,会先等待远程调试的连接,连接成功后再启动进程。

假设代码的根目录:

/data/pzqu/read_phy_disk_use/,执行以下代码以后编译

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /data/pzqu/read_phy_disk_use/build
cmake .. -DCMAKE_BUILD_TYPE=Debug
make
gdbserver :1234 ./read_phy_disk_use

注意:cmake的指定需要-DCMAKE_BUILD_TYPE=Debug来请获取调试

方法2——远程gdbserver的动态连接

gdbserver的还支持动态绑定到已经启动的进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gdbserver :1234 --attach <PID>
打断点开始调试

点击小虫子开始调试

1)我们可以看到代码停止到了断点处

2)Variables 是可以自己设置的watch

3)和正常调试方式一样啦

五、用CLion完全的在远程工作

这是一个非常非常爽的操作,以后就可以完全的用IDE来写代码了,虽然使用命令行显得比较专业,但是使用工具可以有效的提高工作效率,何乐而不为呢?

1)进入 Preferences | Build, Execution, Deployment | Toolchains

2)设置远程连接信息,CLion会自动监测CMake gcc g++ gdb的信息

1)进入Preferences | Build, Execution, Deployment | CMake

2)Toolchain 选择我们刚刚设置的

3)上面的Automatically reload CMake project on editing 的设置勾上的时候,只要代码有修改就会自动编译

1)现在已经配置了远程Toolchains工具链并配置了相应的CMake配置文件

2)上图是自动编译和上传到的目录/tmp/tmp.pIdETgMIBR,然后我们只要设置为自动同步目录就成了,如下图

现在已经设置成了自动同步目录,只需在运行/调试配置切换器中选择正确的CMake配置文件,即可以完全远程的方式构建,运行和调试应用程序和测试。

添加Application来跑我们的程序

远程运行,本地输出结果

远程运行,本地自动调试

六、总结

1、配置CLion中的同步信息:同步到哪台机器的哪个目录。

2、使用 Deployment 让本地和远程可以自动同步和自动下载,手动同步和手动下载代码

3、配置GDB remote Debug设置

4、使用gdbserver来启动程序进行调试

5、使用gdbserver attach依附已经启动的程序进行调试

6、完全在本地进行远程代码调试

七、其他

1、这种方式是不是非常的优雅,这样我们只要不断的添加工具链(Toolchains)就可以在本地应对数不清的远程环境了。

2、这种方式应该适用于JetBrain全家桶。

猜你还想看这些内容

●Harbor企业级实践丨20倍性能提升so easy!

●Harbor企业级实践丨零侵入改造!

Kustomize上篇丨Helm 和 Kustomize:不只是含谷量的区别

Kustomize下篇丨Kustomize 中的增删改查

· END ·

记得文末点个好看鸭~


点就完事儿了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云TStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一篇文章带你了解JavaScript window location
window是DOM的核心对象,表示浏览器的一个实例。在浏览器中,window对象有双重角色,它是通过JS访问浏览器窗口的一个接口,也是Global对象(参考百度)。
前端进阶者
2021/01/22
8570
JavaScript BOM浏览器对象模型
BOM  1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能。BOM缺少规范,每个浏览器提供商又按照自己想法去扩展它,那么浏览器共有对象就成了事实的标准。所以,BOM本身是没有标准的或者还没有哪个组织去标准它。 一.window对象 BOM的核心对象是window,它表示浏览器的一个实例。window对象处于JavaScript结构的最顶层,对于每个打开的窗口,系统都会自动为其定义 window 对象。 1.对象的属性
汤高
2018/01/11
2.1K0
【基础进阶】URL详解与URL编码
作为前端,每日与 URL 打交道是必不可少的。但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很多坑。故写下此篇文章,详解一下 URL 。 URL 与 URI 很多人会混淆这两个名词。 URL:(Uniform/Universal Resource Locator 的缩写,统一资源定位符)。 URI:(Uniform Resource Identifier 的缩写,统一资源标识符)。 关系: URI
Sb_Coco
2018/05/28
4.8K0
js获取地址栏传参
地址:http://127.0.0.1:8082/prosperleedir/index.html?id=6666&name=prosper#prosper         Location{    
ProsperLee
2018/10/24
6.8K0
js获取地址栏传参
Window.location 详细介绍
如果你需要获取网站的 URL 信息,那么 window.location 对象就是为你准备的。使用它提供的属性来获取当前页面地址的信息,或使用其方法进行某些页面的重定向或刷新。
Originalee
2020/05/18
2K0
Window.location 详细介绍
PHP模拟发送POST请求之二、用PHP和JS处理URL信息
明白了HTTP请求的头信息后,我们还需要对请求地址有所了解。再者,HTTP GET请求是靠URL实现的,所以了解URL的构造,处理URL的重要性不言而喻。 在PHP中我们用parse_url()函数来
枕边书
2018/01/04
2.7K0
浏览器中的JavaScript核心BOM(浏览器对象模型)重点掌握对象之Location对象的属性与方法
在学过JavaScript之后,我们都知道对象分为内置对象 、宿主对象 、自定义对象,我们经常用到的浏览器中的内置对象就是宿主对象的一种,浏览器的内置对象有很多,本文就来详细讲解一下Location对象的属性与方法吧。
@零一
2021/01/29
7610
浏览器中的JavaScript核心BOM(浏览器对象模型)重点掌握对象之Location对象的属性与方法
location对象
是最有用的BOM对象之一,提供了与当前窗口中加载的文档有关的信息,还提供一些导航功能。location是个神奇的对象,既是window的对象也是document的对象。
小小鱼儿小小林
2020/06/23
5310
跳转与导航 | Electron 安全
导航我们都知道,高德地图对吧,我们搜索一个地点,它告诉我们如何到达。对于网站来说,导航是帮助用户到达用户想去的地方(网址)
意大利的猫
2024/05/11
4560
跳转与导航 | Electron 安全
javaScript的常见document对象
对象属性 document.title //设置文档标题等价于HTML的title标签 document.bgColor //设置页面背景色 document.fgColor //设置前景色(文
botkenni
2019/09/03
9300
javaScript的常见document对象
http协议和Chrome抓包工具
HTTP协议:全称是HyperText Transfer Protocol,中文意思是超文本传输协议,是一种发布和接收HTML页面的方法。服务器端口号是80端口。 HTTPS协议:是HTTP协议的加密版本,在HTTP下加入了SSL层。服务器端口号是443端口。
用户2200417
2022/02/17
9650
JavaScript学习笔记027-BOM0window0location
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 这几天找工作 遇到一件让我非常尴尬的问题 赶场似的用了三天学了vue和小程序开发 然后赶出两个实战项目 很多api都还不熟练 导致面试时问的问题 完全答不上来 而且好多不常用的原生js的方法都忘记了 问的时候一问三不知 还因为紧张导致底气不足 一慌就乱答一气 哎 凄凉啊...... <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='en'> <!--
Mr. 柳上原
2018/10/10
5270
什么是跨域跨域解决方法_500错误原因解决方法
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
全栈程序员站长
2022/08/02
2.1K0
什么是跨域跨域解决方法_500错误原因解决方法
这份 window.location 备忘单,让你更有条理解决地址路径问题!
作者:Samantha Ming 译者:前端小智 来源:medium 点赞再看,养成习惯本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞
前端小智@大迁世界
2020/07/10
8310
如何使用 JavaScript 解析 URL
在 Web 开发中,有许多情况需要解析 URL,这篇主要学习如何使用 URL 对象实现这一点。
前端小智@大迁世界
2019/03/15
3.2K0
如何使用 JavaScript 解析 URL
第189天:BOM属性方法
replace和assign的区别  replace()方法所做的操作与assign()方法一样,  但它多了一步操作,即从浏览器的历史记录中删除了包含脚本的页面,  这样就不能通过浏览器的后退按钮和前进按钮来访问它了, assign()方法却可以通过后退按钮来访问上个页面。
半指温柔乐
2018/09/11
3600
Python3 网络爬虫(一):初识网络爬虫之夜探老王家(2020年最新版)
网络爬虫,是一门比较通用的基础技术,各个领域都会有所涉及,比如我做视觉算法的,也需要用到网络爬虫,例如调用 API 接口清洗数据等,这本质也都是一个小的爬虫程序。
Jack_Cui
2020/04/23
6210
Javascript - BOM 对象
用以下内容可以自己手写一个 TodoList 小程序,再添加几行代码就可以用手机浏览器保存在桌面变成一个 web-app 使用!我自己写的托管在 GitHub,感兴趣的可以看看源码给个 star!~
Carlos Ouyang
2019/08/19
9380
Python之JavaScript逆向系列——1、URL——http与https
大家好,本系列文章主要为大家提供的价值方向是网络信息获取,自动化的提取、收集、下载和记录互联网上的信息,加之自身分析,可以让价值最大化。整个内容中不会涉及到过为敏感的内容。
红目香薰
2023/12/18
2900
Python之JavaScript逆向系列——1、URL——http与https
原 八、BOM
作者:汪娇娇 时间:2017年11月18日 BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。 一、window 对象 BOM的核心对象是window,它表示浏览器的一个实例。在浏览器中,window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。 1、全局作用域 全局作用域中声明的变量、函数都会变成window对象的属性和方法。 定义全局变量与在window对象对象上直接定义属性的差别:全局变量不能通过delet
jojo
2018/05/03
9230
推荐阅读
相关推荐
一篇文章带你了解JavaScript window location
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验