目标机器是一台arm64的板子,由builroot构建。首先添加一项运行配置,可以通过运行--->编辑配置来,也可以通过锤子旁边的下拉框来。
点击+号,下拉框中选择远程调试,因为这里gdbserver是跑在arm64的板子上,clion这边相当于一个gdb client,所以选择远程调试,而不是远程gdb服务器。
接下来就是配置这个远程调试,关键的有4个项:
- 调试器:就是交叉编译工具链里面的那个gdb,我这里是buildroot,它在
buildroot/out/xxxx/host/bin
下 - 'target remote'实参:知道 gdb+gdbserver的都明白啥意思,就是gdbserver那端的ip:port或者串口设备名,这里需要注意一下,你的~/.gdbinit这个文件里面配置的target remote动作一定要删除,不然远程调试会失败,应该是冲突了。
- 符号文件:一般就是编译出来的你将要调试的程序,通常情况下我们通过-g 或者 -ggdb选项来编译带调试信息的程序,但是也可能使用工具把调试的符号信息单独剥离出来,这时要指定这个剥离出来的文件。
- sysroot:就是交叉编译时的逻辑根目录,交叉编译工具链链接时,路径的搜索就是基于这个逻辑根目录的,调试的时候,一些库的信息打印,例如做bt操作时,也是依赖它。在buildroot下,它在
buildroot/out/xxxx/staging
此外还有个小细节需要提到,主要是和我用buildroot构建相关。因为buildroot构建(openwrt也类似,它基于buildroot)时,会把源码从tar包里面解压到编译目录,编译。如果是本地的源码,它也会通过rsync同步到编译目录,远程调试时,符号指向的文件路径是编译目录里面那个,clion却是在你的本地源码里面建立工程的,所以会有些问题,此时只需要做一下路径映射就可以解决这个问题:
远程路径填:你的应用在buildroot的编译目录
本地路径填:你clion工程对应的这个项目的源码目录