前言:本文旨在帮助需要在远程主机编译程序,又在另一远程系统(比如开发板)调试程序的朋友,讲解了CLion的关键配置,实现本地编辑程序,上传到服务器编译,把可执行文件下载到本地,debug时上传到开发板,配合开发板中的gdb server进行调试。如何配置交叉编译工具链、开发板安装gdb server等请自行查阅其他地方。
CLion官方帮助文档:Complicated remote scenarios | CLion Documentation (jetbrains.com),JetBrains自家的文章写的也很清楚了,有兴趣的朋友可以直接看英文原文。
准备环境:
1、CLion软件:下载 CLion:用于 C/C++ 开发的智能跨平台 IDE (jetbrains.com)。
2、交叉编译环境,比如ubuntu主机+arm-xx-gcc,ubuntu主机需要安装较新版本的cmake,ubuntu自带的cmake版本太低,可能无法配置成功。
3、开发板带有gdb server。
正文:
1、CLion配置交叉编译工具链。
配置之前,先创建一个“C Executable”工程,并创建一个debug目录,放置之后编译好的可执行文件。
参考配置:
Name:工具链名称。
Credentials:连接ubuntu主机的凭据。
C Compiler:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc
C++ Compiler:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-g++
配置完工具链后,我们还要将其设置为当前项目的CMake工具。
2、编译可执行文件并下载到本地。
工具链配置好之后,我们点击右上角的“编译”(小锤子)按钮。成功编译后,我们可以看到如下信息:可执行文件的名称就是当前工程的名称“Remote_GDB_ARM_Board”。
接着,我们可以直接在CLion打开一个终端,用scp命令下载到当前工程的debug目录。
参考命令:scp book@192.168.5.11:/tmp/tmp.qlQJ83CF4j/cmake-build-debug-arm-build-tencentcloud/Remote_GDB_ARM_Board debug
可以通过配置密钥对的方法,来实现免密连接服务器,有关配置请查阅其他文章。
3、CLion配置开发板的gdb server。
接下来,我们点击顶部工具栏“编译按钮”左侧的下拉框,点击“Edit Configurations“。
左上角“+”号,选择新增一个“Remote GDB Server”。
然后填写红框中的内容:
Name:随便,可以写gdb server。
Executable:就选择我们之前下载到debug目录的可执行文件。
Credentials:填写连接开发板的凭据。
Upload Path:选择上传到开发板的目录。
target remote args:gdb server IP+端口号。
下面是我自己的配置。
4、配置“Run external tool”,用 scp 下载文件到本地。(非必要)
添加玩gdb server的信息后,下方的“before launch”,我们新增一个外部工具,每次启动调试前执行scp命令,从服务器下载可执行文件。前提是我们实现了免密登录服务器,否则执行scp无法输入密码,这个“Run external tool”是无法成功执行的,调试也跑不起来。或者我们每次手动在终端执行scp,就可以输入密码了。
Name:copy_binary。
Program:scp
Arguemnts:book@192.168.5.11:/tmp/tmp.qlQJ83CF4j/cmake-build-debug-arm-build-tencentcloud/Remote_GDB_ARM_Board debug
配置完成后,我们先切换到gdb sever的配置,然后打个断点,调试下试试,如下图:
5、使用gdb server时如何传入程序参数。
还是编辑gdb server的配置页面,然后我们填写“GDB Server args”,用逗号分隔“:1234 /mnt/sd/Remote_GDB_ARM_Board /dev/input/event0”,即”:端口号 可执行文件 程序参数“。
参考文献:
Complicated remote scenarios | CLion Documentation (jetbrains.com)
Specify "Program Arguments" in "Remote GDB Server" : CPP-22678 (jetbrains.com)
External tools | CLion Documentation (jetbrains.com)
Remote SSH External Tools | CLion Documentation (jetbrains.com)