Clion Remote Development
Clion remote development
参考:
IDEA系列软件,使用相同的架构,在我们开发的过程中,项目可以被分为以下四个组件
- 源代码 - Source code(编码)
- 编译工具 - Tools chain(编译)
- 可执行文件 - Binaries(部署)
- 调试符号 - Debug symbols(调试))
可以在windows进行编码,然后同步代码到Ubuntu进行交叉编译,再将编译出的可执行文件下载到开发板,通过gdbserver运行进行调试
开发环境的不同模式:
本地开发
- 本地编码编译调试执行 [编码(Local)] [编译(Local)] [调试(Local)] [部署(Local)]
远程开发
场景讲解
- 直接将本地编译好的二进制文件,拷贝到部署设备,直接运行
- 不仅仅满足于直接部署在远程设备运行,还希望能在部署设备上进行调试,将代码,可执行文件,和调试符号同步到部署设备
这里可以看到,会有许多同步工作需要做,为了避免错误,可以使用工具async和SCP来进行,Clion也提供同步的功能.
为了让远程开发,更加自动化简单化,Clion提供了两种远程Debug模式
- Remote Debug
- Remote GDB Server
Clion还提供了组件可以通过网络通信的方式,使用远程的gdb server来进行调试
- 同步来同步去感觉还是显得麻烦,还可以直接通过ssh访问部署设备进行开发
此时本地设备只有源代码,更像是一个单纯的代码编辑器,部署设备上有源代码,编译工具,可执行代码,和调试符号.
小结
- 如果部署机器性能比较差,例如树莓派等嵌入式设备,就可以在本地设备进行开发,然后交叉编译产生部署设备平台的可执行文件,然后同步相关组件到部署设备,进行调试.
- 反之,可以在本地,只针对源代码进行编码工作,然后同步到部署设备,在部署设备进行编译生成可执行文件,然后调试.
主要区别技术在哪里执行编译这个比较消耗资源的操作.
Remote development
全局设置 windowns下idea修改配置
Full remote mode
- Local machine : Windows
- Remote machine : Ubuntu
- Clion path : Local
- Source code path : Local, automatic synchronization to remote host(FTP/SFTP)
- Compiler tools : CMake/Makefile
- Compiler path : Any platform can compiler target bin
- GDB client path : Local
- GDB server path : Remote
- Run bin path : Remote
全远程模式,主要是通过SSH连接到目标设备进行开发
常规流程
- 代码保存在本地设备,通过同步工具,同步到目标设备
- Clion调用远端编译工具,编译可执行文件
- Clion调用远端gdb,执行调试
Full remote mode demo
添加配置ToolChain
目标 : 为了调用远程编译工具编译远程平台的可执行文件 注意 : 如果需要root登录需要修改server的ssh配置 参考: Ubuntu 20.04 配置ssh可以用root登录
创建相应的CMake配置文件
因为在上步骤将新建的Remote ToolsChain设置为默认了 这里就会自动连接到远端设备的Cmake/Make
如果没有设置默认ToolsChains 就需要手动设置配置一下Cmake CMakeProfile 注意: 这里其实就是选择用哪里的什么编译器来编译当前的代码
在 Makefile 设置中选择远程工具链
因为在上步骤将新建的Remote ToolsChain设置为默认了 这里就会自动连接到远端设备的Cmake/Make
检查和验证部署配置
第一次部署需要在IDEA中手动点击才会不影响后续的自动上传
排除路径
默认情况下,CLion 会索引并同步 CMakeLists.txt 中列出的所有目录。 但是,如果您使用将目录标记为 | 来排除目录。 排除动作,远程部署会被标记为排除路径,不会与远程机器同步。 当您在配置远程工具链之前排除文件夹时,会自动执行此操作。
您可以在部署条目设置的专用选项卡中检查和调整排除的路径 按需进行设置
Resync头文件搜索路径
Clion 会将目标平台用到的所有头文件,包括标准库的头文件都同步到本地 CLion 仅在初始文件传输时自动执行。 之后,它不会由 CMake 或 Makefile 重新加载触发。 因此,每次切换编译器或更改项目依赖项时,请确保通过调用 Tools | 手动更新头搜索路径。 与远程主机重新同步 注意 : 自动同步即可
编译,运行,调试
CMake
在选择远程ToolChains后 执行编译
会看到选择的是远端设备的Cmke进行编译的执行运行
Makefile
添加Makefile配置
Run -> Edit Configurations …
回到Clion设置断点调试
成功~!
Remote debug via gdbserver/lldb-server
通过gdbserver/lldb-server远程调试在如下场景特别有用:
- 目标设备搭建较为花销资源和成本
- 目标设备没有条件搭建
在目标设备上,通过server命令运行可执行文件(注意:编译可执行文件的时候必须带有完整的调试信息)
Clion 提供了两种远程调试模式:
- Remote GDB Server(只支持GDB) : -> CMake -> 自动编译和上传可执行文件到目标设备 -> 自动执行gdbserver
注意: 如果想在本机编辑非本机平台可执行文件,需要配置修改ToolsChain
- Remote Debug(支持GDB和LLDB) : -> 如果已经有了可执行文件和符号文件,不要CLion进行编译。此配置独立于特定的构建系统或项目格式 -> 需要手动同步文件并在 gdbserver/lldb-server 下启动您的程序
注意: 上述情况,可以理解为,Clion作为代码编辑器和gdb client 调试工具, 编译工作并不是Clion来执行
Remote GDB Server
- Local machine : Windows
- Remote machine : Ubuntu
- Clion path : Local
- Source code path : Local
- Compiler path : Local
- GDB client path : Local
- GDB server path : Remote
- Run bin path : Remote
常规流程
- 在本地编辑代码
- 在本地编译代码
- 上传可执行文件到远端
- 远端执行gdbserver
- 本地Clion gdb client 调试
Remote GDB Server Demo
注意 : 感觉这种远程方式应用场景较少,不做详细测试了
Remote Debug
- Local machine : Windows
- Remote machine : Ubuntu
- Clion path : Local
- Source code path : Local, automatic synchronization to remote host
- Compiler path : Any platform can compiler target bin
- GDB client path : Local
- GDB server path : Remote
- Run bin path : Remote
常规流程:
- 准备好正确编译的带调试信息的可执行文件(以下均称为可执行文件),需要注意编译平台,目标平台可能和Clion的工作平台并不一致
- 目标设备上有可执行文件,本地设备上同步的相同的可执行文件(同步机制下一节讲解)
- Clion创建一个Remote Debug的调试配置,指定好可执行文件(主要目的是为了调试信息),在Clion设置断点等.
- 在目标设备上通过gdbserver/lldb-server运行可执行文件
- 返回本地设备的Clion设置断点进行调试
Remote Debug Demo
- 构建一个简单地CMake & C++项目
参考: Cmake&C++ Demo
- 代码同步
设置上传/下载/自动同步,按需操作
- 在目标设备上编译带调试信息的可执行文件
- 配置远程调试 确认目标设备编译的可执行文件同步回到本地设备
- 返回本地设备的Clion点击右上角编辑调试配置
目标是要在目标设备上运行此段代码并进行调试
- 设置Debug配置 点击左上角的 + 号 选择Remote Debug 具体配置如下
然后在目标设备上运行gdbserver
root@leonli-System-Product-Name:/home/sftp/<path>/build# gdbserver localhost:8080 ./<bin_file>
Process ./<bin_file> created; pid = 501801
Listening on port 8080
Clion上设置断点并点击调试
成功~!
- 上一篇 Vegrant Quick Start
- 下一篇 使用clap编写自己的命令行