EclipseCDT远程交叉编译&远程单步调试&基于makefile例程(实测有效)

前言:

之前写过一篇VSCode远程调试linux,当时是把程序以及代码通过远程的方式,在从机上进行GCC编译,主机上远程GDB调试。这有个弊端就是从机里面会有源代码,同时从机还需要支持GCC和GDB。

后面进一步拓展,VSCoede通过从机的交叉编译链远程编译,把生成的程序放到从机上运行,但是并没有实现远程调试,要想远程调试还得从机编译,这个问题目前还未解决。后面考虑出个博客解决一下VScode远程调试的这个问题,当然了这篇博客其实解决了远程调试的这个问题,只不过是换了个平台。


1. 新建工程

这个新建工程,跟着走一轮就可以了,有工程的话就直接跳过这个章节。
step1:File->New->C Project
在这里插入图片描述
step2:输入项目名称,选择makefileproject项目,工具链选otherToolchain->Finish
在这里插入图片描述
step3:右键项目->New->Source File
在这里插入图片描述
step4:按照如下图配置创建源文件

在这里插入图片描述
step5:右键hello工程->New->File在这里插入图片描述
step6: 选择hello工程,创建名为makefile的文件。
在这里插入图片描述
step7:粘贴测试代码和makefile规则
hello.c源码

#include<stdio.h>
int main()
{
	printf("hello1\n");
	printf("edwinwzy\n");
	printf("chengchei\n");
	printf("hello2\n");
	return 0;
}

makefile规则
注意修改自己的路径

#这里是自己的GCC路径
gcc_path = /opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/
#这里是GCC路径下的GCC编译器
CC     = $(gcc_path)arm-xilinx-linux-gnueabi-gcc
#生成的可执行文件的文件名
execName = hello 

all:
#要单步调试的话这里一定要加 -g 选项
	$(CC) -g hello.c -o $(execName)
#生成的文件移动到这个目录下
	mv -f $(execName) /home/alinx/remote 
clean:
	rm $(execName) *.o *~

最终效果图:
在这里插入图片描述


2. 远程编译环境配置

因为我们的文件要放到从机上,所以我们需要把从机内我们需要使用的目录挂载到主机上,在主机上对挂载的目录进行操作等效于对远程目录操作,有点类似于共享目录。
只有这样EclipseCDT中才可以指定调试程序为远程从机上的可执行文件。
看了几个这个作用的插件,最终找到一个简单又好用的插件sshfs。

2.1 下载sshfs并挂载目录

在控制台输入sudo apt install sshfs
后面输入y即可安装
在这里插入图片描述
安装完成后进行挂载

正常的sshfs的命令是 sudo sshfs 用户名@IP地址: 从机要被挂载的目录 挂载到主机的目录位置
这样写没问题,但是我遇到了一个无法打开什么的问题,后面排查到是权限问题,所以需要相关参数。
我这里使用的命令是:
sudo sshfs -o allow_other root@192.168.1.172:/home/ /home/alinx/remote/
这个命令里面的的参数就解决了权限问题,后面的主机挂载目录对应的文件最好是空的,
至于为什么可以参考我的博客:文件系统挂载

输入完成后,还需要输入密码,就是你ssh远程登录从机用户的密码。

在这里插入图片描述

2.2 Debug配置

step1:右键工程->DebugAs->DebugConfigurations
在这里插入图片描述
step2:新建debug配置
在这里插入图片描述step3:配置Debugger
在这里插入图片描述

在这里插入图片描述

2.3安装EclipseCDT的远程插件

在这里插入图片描述
搜索这个安装,这个插件支持远程调试。
在这里插入图片描述
在这里插入图片描述


右下角有个进度条,满了以后会弹出小窗口,选择信任
在这里插入图片描述

在这里插入图片描述


选择Restart Now
在这里插入图片描述


重启后Eclipse后,如果右上角没有remote的图标,则右上角点击Open Perspective
在这里插入图片描述


最好把Debug也点上,这样后面方便切换视图。
在这里插入图片描述


点击Remote System Explore模式的视图,左侧一栏,右键Local位置,选择新建Connection
在这里插入图片描述


选择SSH Only 再点next
在这里插入图片描述


按自己需要配置后,选择Finish
在这里插入图片描述


此时界面的左边会出现刚创建的配置信息,
在这里插入图片描述


右键Ssh Shells,选择Launch Shell
在这里插入图片描述


这里User ID就是你登录从机的用户名,下面就是对应的密码。
在这里插入图片描述


配置完成后中间会出现Remote Shell的小窗口,验证账户名和密码正确后就会进入ssh界面。
在这里插入图片描述


2.4 拷贝gdbserver

找到自己交叉编译工具链中对应的gdbserver,把它直接复制粘贴到从机系统文件的/usr/bin/目录下即可。
一般gdbserver和刚才交叉编译链的gcc在同一个文件夹下。
对了,别忘了给权限,用sduo chmod 777 xxx-xxx-gdbserver,xxx表示你交叉编译链中gdbserver的前缀,根据实际情况改变。

如何拷贝呢?那就用对应的一些软件直接远程传输数据呗,比如WinSCP。
当然,如果从机支持图形化操作,那就直接U盘传输。
再万能一些就用一些集成SSH,FTP传输的这种协议进行传输。比如:SecureCRT
当然,刚才提到的sshfs挂载,用类似于共享文件的方式也可以传输。
方法很多,因人而异,我只写这么多。


3. 调试

因为刚才在配置Debug的时候选择了自动生成:Enable auto to build,所以我们的文件其实是先生成再开启调试。
单击debug小虫子旁边的下拉按钮,选择刚才配置好的debug配置。

在这里插入图片描述

这时候右下角大概会卡在百分之96,因为从机没有开启gdbserver服务


打开Remote Shell视图
在这里插入图片描述
远程连接上以后,在输入栏输入gdbserver 192.168.1.102:1234 /home/hello注意:这个内容要修改
解释一下字段含义:gdbserver 主机IP:端口号 调试程序所在目录,这里根据自己的主从机进行修改。

接着界面会自动跳转到hello.c的main函数的第一句话停住,后面就可以单步调试了,而且代码也能一一对应。


总结:

这一套配置流程刚开始弄的时候整体下来比较费时间,但是作用还是非常大的。
目前远程调试还存在的问题是,我用makefile编写中型工程的时候,对cpp文件生成中间文件.o文件之后,再把所有的.o中间文件集合生成一个目标文件。虽然编译的时候使用了-g选项,但是还是出现了无法定位到源文件即.cpp的情况,暂未解决。

2023.5.31更新:解决了找不到源文件问题

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Makefile是一种常用的自动化构建工具,用于编译和链接程序。交叉编译是指在一台计算机上编译生成可以在另一种计算机上运行的程序。下面介绍如何使用Makefile进行交叉编译。 1. 确定目标平台和交叉编译工具链 首先需要确定目标平台和交叉编译工具链。目标平台包括处理器架构和操作系统,例如ARM处理器和Linux操作系统。交叉编译工具链是指用于编译和链接程序的工具集,包括编译器、链接器、库文件等。可以从官方网站或第三方网站下载对应的交叉编译工具链。 2. 修改Makefile文件 在Makefile文件中需要添加一些变量和规则,以便使用交叉编译工具链进行编译和链接。下面是一个示例Makefile文件: ``` # 指定交叉编译工具链 CROSS_COMPILE = arm-linux-gnueabihf- # 指定编译器和链接器 CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)ld # 指定编译选项和链接选项 CFLAGS = -Wall -Iinclude LDFLAGS = -Llib -lmylib # 指定目标文件和依赖文件 TARGET = myprogram OBJS = main.o foo.o bar.o DEPS = include/foo.h include/bar.h # 编译规则 $(TARGET): $(OBJS) $(LD) $(LDFLAGS) $^ -o $@ %.o: %.c $(DEPS) $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(TARGET) $(OBJS) ``` 在这个示例Makefile文件中,使用了CROSS_COMPILE变量指定了交叉编译工具链的前缀,例如arm-linux-gnueabihf-,使得编译器和链接器使用交叉编译工具链。同时指定了编译选项和链接选项,以及目标文件和依赖文件。最后定义了编译规则和清理规则。 3. 执行Make命令进行交叉编译 在命令行中执行make命令,即可使用Makefile进行交叉编译。例如: ``` $ make ``` 如果一切顺利,就会生成可在目标平台上运行的程序。 总之,使用Makefile进行交叉编译需要确定目标平台和交叉编译工具链,修改Makefile文件,以及执行make命令进行编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澄澈i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值