背景

项目:开发智能家居项目

chip:IMX6

host:Ubuntu16.04

eclipse IDE:version 2018-09(4.9.0)

搭建gdb+gdbserver+eclipse远程调试环境

记录搭建过程遇到的坑

gdbserver交叉编译

下载gdb源代码,官网:http://ftp.gnu.org/gnu/gdb/

下载最新的版本gdb-10.1版本,解压目录到/home/gateway/gdb下

新建build目录

$ mkdir bulid

再build目录下执行configure

$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/

configure报错,提示:

checking build system type... x86_64-pc-linux-gnu
checking host system type... arm-poky-linux-gnu
checking target system type... arm-poky-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking for gawk... no
checking for mawk... mawk
checking for gdbserver support... yes
checking for arm-poky-linux-gcc... arm-poky-linux-gcc
checking whether the C compiler works... no
configure: error: in `/home/gateway/gdb/build10.1':
configure: error: C compiler cannot create executables
See `config.log' for more details

打开 bulid目录下的config.log日志文件,查看到错误信息:

gcc version 7.3.0 (GCC) 
configure:4336: $? = 0
configure:4325: arm-poky-linux-gcc -V >&5
arm-poky-linux-gcc: error: unrecognized command line option '-V'
arm-poky-linux-gcc: fatal error: no input files
compilation terminated.
configure:4336: $? = 1
configure:4325: arm-poky-linux-gcc -qversion >&5
arm-poky-linux-gcc: error: unrecognized command line option '-qversion'; did you mean '--version'?
arm-poky-linux-gcc: fatal error: no input files
compilation terminated.
configure:4336: $? = 1
configure:4356: checking whether the C compiler works
configure:4378: arm-poky-linux-gcc    conftest.c  >&5
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crt1.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crti.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtbegin.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc_s
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc_s
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtend.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtn.o: No such file or directory

查阅资料,需要添加CC字段,添加c compiler command,指明cross compiler的路径和sysroot的路径;再次执行configure命令

$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi"

还是报错,打开config.log日志文件,查看到错误信息:

/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: error: a.out uses VFP register arguments, /tmp/ccZCkn0C.o does not
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: failed to merge target specific data of file /tmp/ccZCkn0C.o

查阅资料,说需要添加浮点运算处理方式,最开始是添加CFLAGS="-mfloat-abi=softfp"

$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi" CFLAGS="-mfloat-abi=softfp"

编译还是报错,查看config.log,发现错误信息

/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: error: a.out uses VFP register arguments, /tmp/ccVSaX3d.o does not
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: failed to merge target specific data of file /tmp/ccVSaX3d.o

然后修改使用CFLAGS="-mfloat-abi=hard"

$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi" CFLAGS="-mfloat-abi=hard"

configure执行成功,生成Makefile文件

接下来执行make,编译报错,错误为:

make[2]: Entering directory '/home/gateway/gdb/build10.1/gdbsupport'
make  all-am
make[3]: Entering directory '/home/gateway/gdb/build10.1/gdbsupport'
  CXX      agent.o
In file included from ../../gdb-10.1/gdbsupport/common-defs.h:86:0,
                 from ../../gdb-10.1/gdbsupport/agent.cc:20:
../gnulib/import/stdio.h:43:15: fatal error: stdio.h: No such file or directory
 #include_next <stdio.h>

^~~~~~~~~
compilation terminated.
Makefile:503: recipe for target 'agent.o' failed

查阅资料,说可以屏蔽掉这一句,找到这个文件屏蔽后,还是报错

后续还有报错,重复定义变量,查阅资料说屏蔽掉,继续编译,后面继续报错说有变量未定义,放弃编译

换成gdb7.10版本编译

编译通过

在make install 过程中报错

说是权限不够,使用

$ sudo make install

报错找不到runlib命令,说原因是切换到root权限后,没有把cross编译路径加入到环境变量来,后面修改/etc/profile,将我本地的cross编译路径

/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux

加入到环境变量中去,并且运行

$ source /etc/profile

安装成功

在输出路径下生成了

gcore

gdb

gdbserver

run

4个文件,再用cross编译器自带的 arm-poky-linux-strip 裁剪大小

$ arm-poky-linux-strip gdbserver

最终文件大小400多KB

搭建调试

首先切换工程为debug模式编译

  1. 在Project->Properties->C/C++ Build 中确保Configuration是Debug的,如果不是切换到debug模式
  2. 在Run->Debug Configuration->C/C++ Remote Application中,创建对应工程的debug调试工程

注意点,刚开始我用的是GDB(DSF)Automatic Remote Debugging Laucher,但是gdb+gdbserver一直建立不起来通讯

后面还是换成GDB(DSF)Manaul Remote Debugging Laucher

在红框这里修改

切换到Debugger,修改GDB debugger对应的输出框内容为你的交叉编译器gdb版本的所在路径,我这里就是

/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gdb

切换到Debugger->Shared Libraries,将交叉编译环境的lib路径包含进来,我这里是

/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi/lib

切换到Debugger->Connection,Type选TCP,IP改为目标机IP地址,端口子定义,与在目标机上运行gdbserver时输入的端口号相同即可,我这里设置为2000

当然也可以选串口相连,我这里选了TCP连接方式

3. 将生成的gdbserver拷贝到目标机上,我把gdbserver宝贝到和要调试的程序同一路径,cd到该路径下,运行

$ gdbserver localhost:2000 yourpogram_path

成功的会显示

process yourpogram_path created; pid=xxx

Listening on port 2000

这时在eclipse点击debug,就可以开始调试了

gdbserver 交叉编译相关推荐

  1. Linux下交叉编译gdb和gdbserver

    平台:tq2440 GCC:  gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) 这里过程中参考了下面两篇博文: http://blog.csdn.ne ...

  2. gdb+gdbserver

    内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试stub是嵌入式 ...

  3. 【GDB】gdbserver的使用,远程调试开发板

    0.将gdbserver拷贝到目标板子上 注:gdbserver在交叉编译工具目录/debug-root/usr/bin下 可用file命令查看 --------------------------- ...

  4. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...

  6. 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )

    文章目录 一.下载 p7zip 源码 二.交叉编译 Android 中使用 7z 可执行程序 三.参考资料 一.下载 p7zip 源码 下载 7zip 源码 , 下载页面 https://source ...

  7. vs linux 交叉编译,VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境

    由于此开发环境涉及3设备协同工作,因此先说明一下整体开发环境的配置以及每部分所负责的功能: 1.Windows PC 这里我用的是64位Win7,作为VS的安装环境Windows自然是必不可少的,本机 ...

  8. 使用gdbserver远程调试

    使用gdbserver远程调试   1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1 下载地址:http://ft ...

  9. 交叉编译和交叉调试环境的搭建及使用

    1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译.这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成 ...

  10. php5.6 交叉编译,Cross-compile - 龙芯开源社区

    ★ 龙芯交叉编译器 龙芯交叉编译器有gs464核版本和ls232核版本两类,其中gs464核版本适用于loongson3a/3b.loognson2h.loongson2k.ls232核版本适用于lo ...

最新文章

  1. 前端开发必备的 5 个「高薪」技能
  2. MySQL 5.6 手册 第三章 目录
  3. 安装composer以及laravel框架
  4. 浅谈JavaScript中forEach与each
  5. bcscale php,【PHP开发】bcscale timezone charset的设定说明
  6. 95-134-114-源码-维表-Hbase维表关联:LRU策略
  7. LINUX文件的压缩与打包
  8. win10 x64下安装oracle 12c出现[INS-30131]报错的解决方案
  9. java Array入门
  10. Redis缓存组件开发规范
  11. 服务器挂软件系统,云服务器挂软件用什么系统
  12. linux cximage动态库,64位Linux编译cximage手记
  13. 算法与数据结构——百度笔试题(一)
  14. odi连接oracle数据库,通过ODI接口把数据从Oracle数据库抽到HIVE数据库怎么解决
  15. 关于请求报文和响应报文的详解
  16. 为何要配置环境变量?带你一探究竟
  17. Chapter 3 (Determinants): Cramer‘s rule, volume, and linear transformations (克拉默法则、体积和线性变换)
  18. 量子计算:当前阶段仍属于热炒概念
  19. ftp连接失败问题的解决
  20. Python 调用 Outlook 发送邮件

热门文章

  1. Apache Hive 垃圾回收
  2. 10款必装软件,让Windows使用效率飞起!
  3. MATLAB学习(一)——————format 命令
  4. Python运算(四)random模块secrets模块
  5. 四象限时间管理有多好用?
  6. P5208-[WC2019] I 君的商店【交互,二分】
  7. 守望轮回谷等待服务器响应,《守望轮回谷》即将接班自走棋?Dota2新地图再次掀起热潮...
  8. 饭后Android 第二餐-复选框CheckBox+开关按钮Switch+单选按钮RadioButton
  9. BPI 流程优化和BPR流程重组
  10. 大数据、云计算、人工智能的融合应用分析