第一部分:使用GDB

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

遇到的主要难点:

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

  

编译前基本知识科普:

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

  

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

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

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

这里简略概括:

交叉编译GDB并安装

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

交叉编译GDBServer

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

  

其他备注:

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

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

1.

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

2.

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

  

我的ubuntu情况展示:

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

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

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

.

.

嵌入式arm-linux mips-linux 交叉编译GDB,结合vscode图形化调试使用,coredump定位段错误的更多相关文章

  1. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  2. Linux下利用backtrace追踪函数调用堆栈以及定位段错误[转]

    来源:Linux社区  作者:astrotycoon 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序 ...

  3. linux下利用backtrace追踪函数调用堆栈以及定位段错误

    一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc ...

  4. Linux下利用backtrace追踪函数调用堆栈以及定位段错误【转】

    转自:https://www.linuxidc.com/Linux/2012-11/73470p2.htm 通常情况系,程序发生段错误时系统会发送SIGSEGV信号给程序,缺省处理是退出函数.我们可以 ...

  5. 【Linux】利用Xvfb关闭chrome的图形化输出

    利用Xvfb关闭chrome的图形化输出 #!/bin/bash . /home/fzuir/.profile # JAVA export JAVA_HOME=/usr/local/jdk1.7.0_ ...

  6. Linux高级编程--04.GDB调试程序(入门概述)

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

  7. linux下如何用GDB调试c++程序

    转:http://blog.csdn.net/wfdtxz/article/details/7368357 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形 ...

  8. Linux下的段错误(Segmentation fault)

    Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...

  9. linux 段错误常见处理方法

    1.如果没有产生core文件,可以查询系统log 通过 sudo cat /var/log/messages |grep segfault 或者 sudo dmesg|grep segfault 获得 ...

随机推荐

  1. Golang | 简介channel常见用法,完成goroutin通信

    今天是golang专题的第14篇文章,大家可以点击上方的专辑回顾之前的内容. 今天我们来看看golang当中另一个很重要的概念--信道.我们之前介绍goroutine的时候曾经提过一个问题,当我们启动 ...

  2. 接口测试中postman环境和用例集

    postman的环境使用 postman里有环境的设置,就是我们常说的用变量代替一个固定的值,这样做的好处是可以切换不同的域名.不同的环境变量,不同的线上线下账户等等场景.下面就看下怎么用吧. 创建一 ...

  3. Docker 镜像的备份恢复迁移

    在大家已经学会了如何构建镜像以后,为了备份该镜像,我们有以下几个选择: 我们可以将指定镜像保存成 tar 归档文件,需要使用时将 tar 包恢复为镜像即可: 登录 DockerHub 注册中心,将镜像 ...

  4. 记录laravelchina中的微信小程序教程的第四节的安装easy WeChat扩展的报错

    composer require "overtrue/laravel-wechat:~5.0 PHP Fatal error: Allowed memory size of 16106127 ...

  5. 在Fragment 中拦截返回键

    代码如下: class XXXFrgmt : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ...

  6. MySQL 数据库 查 续

    MySQL 增删查改 必知必会 4.1.13 使用 like 关键字进行模糊查询 -- 说明:模糊查询,使用查询关键字like,like意思是类似于,像...的意思 -- 模糊查询,支持两种字符匹配符 ...

  7. 石子合并(区间dp典型例题)

    Description 有n堆石子排成一行,每次选择相邻的两堆石子,将其合并为一堆,记录该次合并的得分为两堆石子个数之和.已知每堆石子的石子个数,求当所有石子合并为一堆时,最小的总得分. Input ...

  8. P3311 [SDOI2014]数数 AC自动机+数位DP

    题意 给定一个正整数N和n个模式串,问不大于N的数字中有多少个不包含任意模式串,输出对\(1e^9+7\)取模后的答案. 解题思路 把所有模式串都加入AC自动机,然后跑数位DP就好了.需要注意的是,这 ...

  9. 2020重新出发,NOSQL,Redis主从复制

    Redis主从复制 尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的读操作. 对于一些热门网站的某个时刻(比如促销 ...

  10. .net core3.1中实现简单的jwt认证

    1.创建项目 使用visual studio创建一个名为JwtDemo的空项目,创建后如图 2.添加依赖项 在nuget包管理器中搜索 Microsoft.AspNetCore.Authenticat ...