GDB 调试工具的使用和交叉编译安装

2023-11-09

作用:
        1.可以让我们的代码单步运行,并且可以打印出运行时各种变量的值
        2.还可以调试各种 core(核心)文件
在启动 gdb 调试程序的时候,我们需要使用到 gcc/g++命令指定-g 参数生成可执行调试程序
例如:
g++ -g main.cpp -o main
生成的可执行调试文件才能进行 GDB 调试
例如:
gdb main

GDB 命令 

l : (list) 列举源文件 把调试文件内容打印在屏幕上,打印不下继续 l 打印剩下部分
q 或 quit : 退出 gdb 的调试程序
b (breakpoint)设置断点,行程序到断点的时候会停下来 ,用法: b 函数名/行号
info b : 查看设置的断点的信息
delete num : 删除 num 表示的断点(num 是断点的标号,可以用 info b 查看)
r running 运行程序, 程序开始运行,遇到断点会停下来
p n: print n 打印变量 n 的值,类似 printf 也可以直接 printf n 打印
n: 下一步 单步运行
s 下一步 单步运行
disassemble 反汇编,根据当前的二进制文件,查看汇编代码
--------------------------------------------------------------------
n 和 s 的区别:
        n 执行调用函数会直接当成一条语句直接执行不会进入函数内部一步步执行。s 会进入调用函数内部单步运行
---------------------------------------------------------------------
        本文件只讲解 gdb 最基础的使用,详情请参考以下博客:
(10 条消息) Linux 环境下的 GDB 调试方法_horotororensu 的博客-CSDN 博客

交叉编译的安装步骤

1.去网上下载一个交叉编译工具压缩包
2.把交叉编译工具链的压缩包,放到自己的 linux 系统下,例如:把编译器复制到家目录
cp arm-linux-gnueabi-5.4.0.tar.xz /home/china/
3.解压到一个合适的目录,例如:
sudo mkdir /usr/local/arm //创建一个新目录
sudo tar -xvf arm-linux-gnueabi-5.4.0.tar.xz //解压到该目录
4.解压完成后,在解压后的目录中就有我们常用的交叉编译工具: 例如:
/usr/local/arm/5.4.0/usr/bin
就可以使用这个交叉编译器去交叉编译可执行程序
如:
/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc hello.c -o hello
5.但是我们每次使用交叉命令要打这么长的一串目录很不方便,所以我们可以修改环境变量 把
我们这个交叉编译工具链的路径变成默认路径的一部分
把我们的这个目录加入到一个名字叫做 PATH 的环境变量的后面 PATH=dir1:dir2:dir3....,有三种
方法:
1.临时性的(仅对次终端有效),使用 export 导出环境变量,例如:
export PATH=$PATH:/usr/local/arm/5.4.0/usr/bin/
2.设置对当前用户有效,写入家目录中的配置文件,例如:
vim ~/.bashrc
export PATH=$PATH:/usr/local/arm/5.4.0/usr/bin/
3.设置对所有用户有效,把上面的语句写到系统的配置文件 例如:
vim /etc/profile (或 vim /etc/environment)
export PATH=$PATH:/usr/local/arm/5.4.0/usr/bin/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDB 调试工具的使用和交叉编译安装 的相关文章

随机推荐

  • 基于tiny6410的led驱动程序

    今天弄了一个晚上了 终于弄懂了第一个简单的linux驱动感觉很多人编写的第一个驱动也是拿led开刀的吧 本文的led驱动是基于tiny6410的四个led驱动 用字符设备的驱动模块 而不是混杂设备驱动模块来编写 本人在使用混杂设备方法编写的
  • 5735. 雪糕的最大数量

    夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪糕的现金价格 Tony 一共有 coins 现金可以用于消费 他想要买尽可能多的
  • pyspark指定schema

    通过StructType对象指定DataFrame的Schema 没有嵌套结构的json jsonString id 01001 city AGAWAM pop 15338 state MA id 01002 city CUSHMAN po
  • r语言 col_co,cob,col,con,cor,cog前缀其实都是com变化而已

    c开头前缀有co cob col com con cor cog等 哪它们有什么关联呢 下面我们来分析 come 英 k m 美 k m v 来 来到 到达 com前缀可以看成come变化而成 全部来到就是聚集到一起 表聚集 加强 强调的
  • select函数使用浅析

    一 函数原型及参数说明 int select int maxfdp fd set readfds fd set writefds fd set errorfds struct timeval timeout 返回值 负值 select错误
  • VIM-Plug安装插件时,频繁更新失败,或报端口443被拒绝

    安装vim插件 tabular时候一直报错 尝试了网上大部分办法 全部失败 方法 直接按照报错的内容自己手动操作 错误如下图 第一步 去github检查插件的网址有没有问题 直接复制网址浏览器搜索 若长时间加载不上 使用科学上网 第二步 若
  • 重写equals方法

    重写equals方法 相信在每个人都有过重写过java的equals的方法的经历 这篇博文就从以下几个方面说明重写equals方法的原由 与君共进步 一 为什么要重写equals方法 首先我们了解equals方法的作用是什么 java的官方
  • [论文笔记] GENDA: A Graph Embedded Network Based Detection Approach on encryption algorithm

    GENDA A Graph Embedded Network Based Detection Approach on encryption algorithm of binary program JISA 2022 Xiao Li Scho
  • 关闭apache-httpClient日志遇到的坑

    log4j logger org OFF log4j logger httpclient OFF 看org apache commons httpclient Wire源码才知道他没有遵循类名 httpclient wire public
  • requests、aiohttp、httpx性能大比拼

    在Python中 有许多用于发送HTTP请求的库 其中最受欢迎的是requests aiohttp和httpx 这三个库的性能和功能各不相同 因此在选择使用哪个库时 需要考虑到自己的需求和应用场景 首先 让我们来了解一下这三个库的基本介绍
  • 科技,让二次元老婆动起来

    想让你的二次元老婆动起来吗 前不久 Meta 也就是Facebook 发布了一款有趣的AI工具Animated Drawings 它可以让静态的儿童画动起来 有些懂行的朋友一看就说 哎呀这不就是关键点检测再加动态化嘛 道理是这个道理 但是儿
  • MYSQl:关于AUTO_INCREMENT

    auto increment是用于主键自动增长的 从1开始增长 当你把第一条记录删除时 再插入第二条数据时 主键值是2 不是1 问题来源 拷贝了公司项目的regions表 发现建表的sql语句如下 CREATE TABLE es regio
  • 两数求最大值 和 交换两个数字

    两数求最大值 include
  • 将图片进行base64 编码后的数据进行读取,以io流的方式传给前台并显示出来并且不断刷新图片

    前提摘要 最近做一个项目 是关于slam的 给slam发送构建地图的命令 slam不断返回json串 而地图的图片在json串中已经经过base64编码了 我这边需要将base64编码解析并以流的方式传给前台显示出来 但是消息是不断要接收的
  • 支付结算周期:D0 D1 T0 T1的区别

    D0 自然日当天 D1 自然日第二天 T0 工作日当天 T1 工作日第二天 D0和T0的区别 比如说 星期六做的交易 D0因为是自然日当天 所以周六即可到账 T0因为是工作日当天 所以下周一可到账
  • 在Windows10下配置深度学习环境(tensorflow-gpu + CUDA & CUDNN),十分详细,推荐小白食用

    在Windows10下配置深度学习环境 tensorflow gpu CUDA CUDNN 本文的基础建立在DUT汽院515教研室的师兄的教程之上 由本人总结更新 希望能帮到更多人 十分感谢师兄们的付出 CUDA的配置 请参考本人的另一篇文
  • 基于LSTM的情感识别在鹅漫评论分析中的实践与应用

    深度学习 深度神经网络 作为机器学习的一个重要分支 持续推动了很多领域的研究和应用取得新的进展 其中包括文本处理领域的情感分类问题 由于可以对文本进行更有效的编码及表达 基于深度学习的情感分类对比传统的浅层机器学习和统计学方法 可以取得更高
  • C++ public、protected 、 private使用详解

    1 类私有成员变量的访问 必须调用类成员函数来进行访问 对于protected成员 继承他的类可以直接在成员函数中调用 而对于私有成员 继承他的类要使用他们的值必须使用基类的成员函数 2 protected成员 基类对象不能调用自身prot
  • ajax中data参数json对象与json字符串的使用区别

    在jquery的ajax里面有个data参数 是客户的传给服务端的数据 我们先看第一种常见写法 前端代码 var username phone email num val var pwd password val ajax url logi
  • GDB 调试工具的使用和交叉编译安装

    作用 1 可以让我们的代码单步运行 并且可以打印出运行时各种变量的值 2 还可以调试各种 core 核心 文件 在启动 gdb 调试程序的时候 我们需要使用到 gcc g 命令指定 g 参数生成可执行调试程序 例如 g g main cpp