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

news/2024/11/28 17:52:40/

文章目录

  • 前言:
  • 1. 新建工程
  • 2. 远程编译环境配置
    • 2.1 下载sshfs并挂载目录
    • 2.2 Debug配置
    • 2.3安装EclipseCDT的远程插件
    • 2.4 拷贝gdbserver
  • 3. 调试
  • 总结:

前言:

之前写过一篇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的情况,暂未解决。


http://www.ppmy.cn/news/109743.html

相关文章

有奖励!2023陕西省首台(套)重大技术装备产品项目申报条件、认定材料

本文整理了2023陕西省首台&#xff08;套&#xff09;重大技术装备产品项目申报条件&#xff0c;认定材料等相关内容&#xff0c;感兴趣的朋友快跟小编一起来看看吧&#xff01; 一、重点支持方向及领域 重点支持方向及领域&#xff1a;高档工业母机、电力装备、大型矿山和冶金…

Transformer 估算 101

本文主要介绍用于估算 transformer 类模型计算量需求和内存需求的相关数学方法。 引言 其实&#xff0c;很多有关 transformer 语言模型的一些基本且重要的信息都可以用很简单的方法估算出来。不幸的是&#xff0c;这些公式在 NLP 社区中鲜为人知。本文的目的是总结这些公式&…

pyest+appium实现APP自动化测试

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs&#xff1f; 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#x…

python笔记16_实例练习_二手车折旧分析p1

python数据分析练习&#xff0c;具体数据不放出。 分析实践很简单。目的不是做完&#xff0c;而是讲清楚每一步的目的和连带的知识点&#xff08;所以才叫学习笔记&#xff09; 0.数据准备 原始数据格式&#xff1a;csv文件 原始数据结构&#xff1a; 数据格式 字段名 int…

日志 | 使用服务器

一篇稍有些散乱的个人记录。 文章目录 1 命令记录2 操作记录1. 添加用户clf2. 使用yum安装mysql3. 修改mysql密码4. 尝试在多个浏览器同时访问部署的blog 3 Bug记录1. 宝塔面板4042. pip freeze导出依赖&#xff0c;在服务器无法使用3. 安装insightface失败4. conda命令not fou…

大数据面试题目(第一部分)

您对“大数据”一词有什么了解&#xff1f; 当谈到"大数据"时&#xff0c;它是指处理和分析规模巨大、多样化且高速增长的数据集的技术和方法。这些数据通常无法在传统的数据库系统中轻松存储、处理和分析。大数据的特点包括数据量大、速度快、多样性高和价值密度低。…

代码随想录算法训练营第五十七天 | 回文

647. 回文子串 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串_哔哩哔哩_bilibili 状态&#xff1a;不会做。 思路 确定dp数组&#xff08;dp table&#xf…

MySQL进阶- SQL优化和视图

目录 SQL优化插入数据时的SQL优化&#xff08;insert优化&#xff0c;和大批量数据插入&#xff09;主键优化order by优化&#xff08;排序操作的优化&#xff09;group by优化&#xff08;分组优化&#xff09;limit优化&#xff08;分页查询优化&#xff09; SQL优化 插入数…