第一部分:使用GDB

GDB源码下载路径:
http://ftp.gnu.org/gnu/gdb/

遇到的主要难点:

选择合适的GDB源码版本
我的mips-linux交叉编译器不支持C++11特性,所以我选择较老的GDB版本
//是不是不太明白我在说啥?自己去试错就知道了。我之前选择了GDB9.1版本,编译途中遇到报该错。
//之后又下载了一个GDB版本来编译,make的时候有其他错误,我无法解决。
最终,我选择的合适版本是 gdb-7.12.1.tar.xz,建议读者也下载该版本。
//版本老点不要紧,够用就行。贪多嚼不烂。

  

编译前基本知识科普:

--prefix指定安装路径
后面的路径一般是我们自己新创建的用来存放目标程序(现在我们的目标程序就是GDB)的文件夹 --target --host 一般一样,指定为交叉编译器的前缀
(我当前mips平台的交叉编译器是mips-linux-gnu-gcc,所以这里后面写mips-linux-gnu) CC指定交叉编译器

  

之后进行编译安装,参考的文档是:

<<正点原子 I.MX6U嵌入式Linux驱动开发指南V1.5.pdf>>第B3章节,

后续操作步骤只有几步,很简单。详情可转去参考该文档。

这里简略概括:

交叉编译GDB并安装

./configure --target=mips-linux-gnu --prefix=/home/lmw/open_lib/GDB/GDBStupHere
make
make install

交叉编译GDBServer

./configure --target=mips-linux-gnu --host=mips-linux-gnu CC=mips-linux-gnu-gcc
make

  

其他备注:

0. 必须先保证开发板和ubuntu主机能ping通,我们在ubuntu主机内进行代码编写,

所以我的应用程序源码在ubuntu主机内。

1.

编译应用程序时要加[-g]选项,否则,GDB调试时会报错。

2.

在我的linux板子上,执行:
gdbserver 192.168.1.23:2001 main_app
//192.168.1.23是主机ubuntu的IP,2001是端口号,可以随便写, main_app是目标可执行程序 开启ubuntu终端,在待调试的应用程序源码文件夹内去启动GDB,执行:
mips-linux-gnu-gdb main_app 连接到开发板上,执行:
target remote 192.168.1.20:2001
//192.168.1.20是开发板的IP 之后ubuntu主机与开发板即可连接成功,可以使用GDB命令进行调试了。

  

我的ubuntu情况展示:

 第二部分: 结合vscode进行图形化调试,coredump使用

Core Dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。
我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,
例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。
core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。 相关设置
如果没有进行core dump 的相关设置,默认是不开启的。可以通过ulimit -c查看是否开启。如果输出为0,则没有开启,
需要执行ulimit -c unlimited开启core dump功能。
编译应用程序源码时要加-g选项。

 PS:需要注意,要通过menuconfig配置内核,使能core功能:

.

.

最新文章

  1. 谈初学Java历程
  2. LCS
  3. Unable to execute dex: Multiple dex files define(错误分析)
  4. linux lsof 用法简介
  5. Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器
  6. UML中的依赖关系
  7. 转: .NET MVC3 几种返回 JSON 对象的方式和注意事项
  8. [HTML]页面间传值的五种方法
  9. tableview 上拉时 标题行出现在顶部不动效果
  10. 简单详细的OD破解教程
  11. python获取系统时间
  12. 使用sprintf打印float并控制小数位数时引起的问题
  13. Git详解之二 Git基础
  14. HTTP Content-type 对照表
  15. Linux配置完iptables后,重启失效的解决方案
  16. 漫话Unity3D(三)
  17. 计算机程序的思维逻辑 (70) - 原子变量和CAS
  18. 团队作业8----第二次项目冲刺(beta阶段)5.25
  19. java课程设计--猜数字(团队博客)
  20. mex (离散化+线段树)

热门文章

  1. .net技术栈转型心路历程分享
  2. 23种设计模式 - 对象性能(Singleton - Flyweight享元)
  3. 08.简单学习redis哨兵主备切换和选举算法
  4. Python数据清洗:提取爬虫文本中的电话号码
  5. 前端修仙之路---一、如何用gulp搭建一套web前端开发框架
  6. 长沙做假证u
  7. 在Mac上打开多个Unity实例
  8. Java常用工具类整理
  9. jdk1.8 时间工具类,可以满足基本操作
  10. Wampserver报错、橙色、mysql打不开