From: http://blog.csdn.net/ghostyu/article/details/8081897

移植gdb到嵌入式的ipnc中,大多数人习惯使用printf调试,但是遇到像”segment fault“这的错误也是后就很难定位,这时候gdb的作用就体现出来了

在pc使用gdb调试应用程序前,应用程序编译是需带上 gcc -g参数,就是编译带有调试信息的程序,不然使用gdb是找不到程序的symbol的

在arm中使用gdb也不例外,也要加上arm_v5t_le-gcc -g参数,只不过,arm上linux不同于pc,嵌入式的gdb采用这样的调试方式:

在arm中运行gdbserver

在pc上运行gdbserver对应的arm-linux-gdb,这样的方式来调试程序。

所以的调试操作均在pc上完成,但是程序的输出还是在arm上。

现在来移植gdb到dm368上

1、下载gdb源码,目前的最高版本的gdb-7.5,下载地址:http://www.gnu.org/software/gdb/download/

2、解压到合适的文件夹下,注意不要放到window与linux共享的目录下即可:tar -xvzf gdb-7.5.tar.gz

3、进入gdb-7.5源码目录,然后配置编译arm-linux-gdb

我的配置是这样的:./configure --target=arm-linux --prefix=/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5 -v

target是指编译的目标平台

prefix是指安装编译好的程序目录,我将它安装到arm_v5t_le工具链的目录。

这里注意了,现在配置编译的不是gdbserver,而是gdbserver对应的需要运行在主机pc上的arm-linux-gdb,虽然linux上已经有gdb命令,但是这个gdb命令式没法跟gdbserver交互的。

编译成功后会在prifix设定的目录下产生arm-linux-gdb可执行程序,如图

target_board 和readme是我自己创建的。

4、进入gdb-7.5/gdb/gdbserver目录,配置,然后交叉编译运行在arm上的gdbserver

4.1在交叉编译gdbserver之前,先进行一些设置:

添加刚才编译好的arm-linux-gdb到PC linux的PATH中

PATH="/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5/bin:$PATH"

4.2配置

./configure --target=arm-linux --host=arm-linux

4.3修改config.h

编译是会产生一个错误,说找不到sys/reg.h

所以这里修改一下config.h,不要去使用reg

#vim config.h
//#define HAVA_SYS_REG_H //注释此句

4.4交叉编译

make CC=arm_v5t_le-gcc

5、将交叉编译好的gdbserver复制到目标文件系统的/usr/locaol/bin目录下,其他地方也可以,只要能在shell中找到gdbserver即可

测试:

1、随便写一个c文件,然后编译

arm_v5t_le-gcc -g test.c

得到a.out,复制到目标文件系统中

2、在目标板上执行

gdbserver 192.168.1.227:1234 a.out

192.168.1.227为目标板ip地址,1234是没有被占用的tcp端口

意思就是创建一个调试服务器,一边主机pc上的arm-linux-gdb能够连接这个服务器来调试a.out

3、在主机pc上执行

arm-linux-gdb a.out

然后在gdb的shell中输入

target remote 192.168.1.227:1234

连接成功后目标板上会打印连接信息,如图

至此,就可以按照通常gdb的命令调试程序啦

附录1:调试时出现的警告

warning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.
warning: Could not load shared library symbols for /lib/ld-linux.so.3.
Do you need "set solib-search-path" or "set sysroot"?

忽略,目前没有发现影响什么。

附录2:gdb调试手册和gdb调试命令的pdf下载,这两篇是我在网上找的,觉得比较好

gdb调试手册:http://www.kuaipan.cn/file/id_48923272389085122.html

gdb调试命令:http://www.kuaipan.cn/file/id_48923272389085121.html

移植gdb到DM368 IPNC中 linux arm gdb相关推荐

  1. linux单步调试方法,linux下gdb单步调试(中).doc

    linux下gdb单步调试(中) linux下gdb单步调试(中) linux下gdb单步调试(中) 一.设置断点( BreakPoint ) 我们用 break 命令来设置断点.正面有几点设置断点的 ...

  2. linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题

    本文转载自微信公众号「程序喵大人」,作者程序喵大人 .转载本文请联系程序喵大人公众号. 在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c++中如何使用 ...

  3. 通过vscode进行嵌入式linux arm开发板gdb调试

    下载和安装vscode, 下载 vscode for windows 地址:  Visual Studio Code - Code Editing. Redefined 安装 "remote ...

  4. 在Linux中如何使用gdb调试C程序

    无论多么有经验的程序员,开发的任何软件都不可能完全没有 bug.因此,排查及修复 bug 成为软件开发周期中最重要的任务之一.有许多办法可以排查 bug(测试.代码自审等等),但是还有一些专用软件(称 ...

  5. linux下gdb单步调试

    用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...

  6. Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲

    Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...

  7. mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译

    0.Part2:mDNS实现之Bonjour与Avahi(二)--win/linux/arm交叉编译_平凡之路-CSDN博客1.BonjourBonjour - Apple Developer● 源码 ...

  8. linux的gdb远程调试,嵌入式Linux的GDB远程调试如何实现呢?

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

  9. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

最新文章

  1. kaggle为什么总是难以拿到金牌
  2. Google 开源技术protobuf 简介与样例
  3. extract()函数:用于从一个date或者interval类型中截取到特定的部分
  4. python的优点有哪些-Python有哪些技术上的优点?比其他语言好在哪儿?
  5. Linux非root用户如何使用80端口启动程序
  6. 5加载stm32 keil_【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)...
  7. php 加密视频播放地址,如何在PHP中实现Clear-Key视频加密并以HTML格式播放
  8. Apple Pencil平替哪个好?Apple Pencil平替笔推荐
  9. 站群网站八大盈利模式浅析
  10. 提升技能,升级思维,你学知识我送T恤,订阅专栏免费领51CTO定制T恤
  11. 微软怎么设计Exchange 2003的体系结构
  12. 平行四边形的效果实现
  13. 使用echarts做气泡图
  14. 从事互联网产品运营所需的8条技能
  15. 洛谷P2530 [SHOI2001]化工厂装箱员
  16. mybatis-plus和mysql
  17. NOIP2011 瑞士轮 题解
  18. shmget - 共享内存
  19. 自动驾驶测绘资质的信息安全要求,真的来了
  20. 制作圆形图片,你会以下几种?

热门文章

  1. 禁止ipc$默认共享的方法
  2. twitter数据分析_Twitter上最受欢迎的数据科学文章主题
  3. 莫烦Pytorch神经网络第四章代码修改
  4. 2057. 值相等的最小索引
  5. leetcode 705. 设计哈希集合
  6. 使用React Native进行气泡动画
  7. matplotlib布局_Matplotlib多列,行跨度布局
  8. [ZJOI2019]麻将
  9. apt-get常用命令及工作原理
  10. Python Dataframe转List