ARM学习(34) GDB 调试器详细了解

在这里插入图片描述

笔者来聊一下对于GDB的一些操作使用认识。

1、GDB的使用以及用途

GDB是GNU的一个项目,具体网站如下,网址:https://www.gnu.org/software/gdb/

  • 支持多种语言,常用的就是C/C++/Python等等
  • 跨平台使用,Linux/windows/MacOS,当然也可以交叉编译,到其他目标平台上面,

在这里插入图片描述
例如:aarch64-linux-gnu-gcc 编译器,是有host x86_64 平台编译出 target是aarch64_linux_gnu的
在这里插入图片描述

2、GDB的安装环境

2.3 Linux安装

(1) sudo apt-get install gdb
(2)下载:http://ftp.gnu.org/gnu/gdb/特定版本源码,然后解压,然后编译出可执行文件。
在这里插入图片描述
在这里插入图片描述

2.4 Windows安装

(1)下载MinGW (SourceCode)https://sourceforge.net/projects/mingw-w64/files/latest/download
Minimalist GNU for windows :一套GNU工具,window下的GNU工作环境
(2)在这里插入图片描述

(3)

  • Architecture:
    i386/i586/i686:不同时期的CPU/ 32位
    x86_84:x(3/4/5/6)86版本 /64位
  • Threads:线程采用POSIX还是win32
    POSIX:可移植操作系统接口(API)C11标准
    WIN32:win32 API接口
  • Exception:异常处理模型
    seh:新发明、不支持32、性能较好
    siji:古老但支持32

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)环境变量 PATH
(5)测试环境是否OK
在这里插入图片描述
在这里插入图片描述

3、GDB的调试原理以及方式

3.1 调试原理

GDB的主要调试原理可参考这篇文章:https://mp.weixin.qq.com/s/_GdfCo9PuOK4bROSxiwM_A

  • 通过系统调用,Ptrace函数,可以实现主进程和子进程的通信与控制
    在这里插入图片描述
    1、父进程观察和控制子进程的运行(gdb接管运行程序)
    2、检查和改变其寄存器等信息
    3、建立在信号基础上,用来断点调试和系统跟踪

  • 函数参数
    1、request 执行的指令 2、pid 跟踪的进程
    3、addr 监控的内存地址 4、data 读取或者写入的数据

  • enum __ptrace_request request(建立父子进程关系)
    1、 PTRACE_TRACEME
    gdb 先fork子进程 ,子进程调用ptrace、运行用户程序 、父子进程通过信号进行交互。
    2、 PTRACE_ATTACH:attach pid
    使得进程号pid的进程成为gdb的子进程。
    3、 PTRACE_CONT
    进行运行之前停止的子进程。

3.2 调试方式

三种方式:注意使用的时候,需要增加-g 选项

  • gdb 运行程序,例如:gdb main.exe 或者 gdb --args 0x1 main.exe
    在这里插入图片描述
    在这里插入图片描述

  • gdb attach pid,如下图
    在这里插入图片描述
    在这里插入图片描述

  • gdb 与 gdb server
    宿主机运行:gdb + 可执行文件
    在这里插入图片描述
    连接目标机: target remote 192.168.0.138:6322
    在这里插入图片描述

目标机器运行:gdbserver ip:端口 + 可可执行文件
在这里插入图片描述
具体可以参考这篇文章Eclipse 远程Debug调试C程序

4、GDB的调试指令

在这里插入图片描述

  • list指令
    用法: list 文件名:行号 或者list 函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • break指令
    1、b file:行号 在指定文件的行号出设置断点。
    2、b file:函数 在文件指定函数的入口处停止
    在这里插入图片描述
    在这里插入图片描述

  • delete指令
    1、delte 断点号/断点号集合
    在这里插入图片描述

  • clear指令
    1、clear+函数/clear+函数:行号
    在这里插入图片描述

  • run指令
    执行程序,遇到断点会停止、否则一直运行到程序结束
    在这里插入图片描述

  • continue指令
    继续运行程序
    在这里插入图片描述

  • next指令
    单步跳过,输入n指令后,enter建可以一直单步
    在这里插入图片描述

  • step执行
    单步执行
    在这里插入图片描述

  • Print (格式) 变量名
    1、常规类型(int/char/float)
    2、结构体类型数值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • Set 变量名 = 数值
    在这里插入图片描述

  • watch 变量/表达式
    1、数据断点
    2、条件断点
    高效调试,非常重要
    例如:
    1、watch test_data_g
    2、Watch test_data_g.value1
    3、watch test_data_g->value3 if test_data_g->value3>2
    在这里插入图片描述
    在这里插入图片描述

  • Examine
    格式:x /FMT address,打印固定格式数据,例如16进制数据
    例如: x /16x 0x191f5f0,以hex形式打印16个从0x191f5f0开始的数据
    在这里插入图片描述

  • Info 指令
    格式:info 功能 参数
    例如:info reg eax
    1、局部/全局变量
    2、寄存器
    3、断点
    4、函数
    5、……

  • thread 指令
    1、info thread:查看所有线程
    2、thread 线程id:切换到对应线程
    在这里插入图片描述
    在这里插入图片描述

  • 显示调用栈指令
    一、backtrace(bt)(±n)栈顶栈底
    显示所有栈内容
    在这里插入图片描述
    二、down (n)
    表示往栈顶方向下移 n 层
    ( n >0,默认值为 1),并打印出栈信息。
    三、up (n)
    up n 命令表示往栈底方向上移 n 层
    ,并打印出栈信息

5、GDB离线调试core文件

5.1 运行生成core文件

ulimit -c unlimited

5.2 设置core文件路径

[root@iZuf6f8d9q28dk29pfvn1nZ ~]# echo “core” > /proc/sys/kernel/core_pattern

5.3 生成core文件

如果发现有coredumpd 的情况,则会有文件生成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4 离线调试core文件

gdb + 可执行文件+ core文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902575.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电机---3直流有刷减速电机

前言 在简单了解电机分类后,为了能够更深入学习了解电机、编码器、PID算法等内容,选择使用野火的直流减速有刷电机和其驱动板进行学习,单片机开发板选择野火的指南者开发板。 1直流有刷减速电机 直流有刷电机转速快,扭矩小&…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

【Android】ViewPager与ViewPager2之间的区别

ViewPager 和 ViewPager2 都是 Android 中用于实现滑动页面切换的控件,但 ViewPager2 是对 ViewPager 的改进和增强版本。 区别 实现方式 ViewPager 继承自 ViewGroup,内部并未使用已有的成熟控件,更多的是自定义的操作。ViewPager2 也继承…

【verilog】模十计数器

文章目录 前言代码 前言 进行 FPGA 模十计数器 实验 仿真结果 代码 主代码 // module module count(clk,rst_n,count,clk1,led);// def io input clk; input rst_n; output reg [3:0] count; output reg clk1; output reg [7:0] led;// always part, or main() always (pos…

【吐槽】豪斯医生之二:第 4-6 集

写在前面 5841 字 | 医学 | 吐槽 | 电视剧 正文 维基百科:   利巴韦林(英语:Ribavirin,俗称病毒唑),是一种抗病毒药,属合成核苷类药,1970 年由 ICN 制药公司 Joseph T. Witkowsk…

景区导航地图怎么实现?基于LBS与3D GIS的智慧景区导航导览系统技术路线

随着经济的发展和人们物质生活水平改善,居民的旅游需求呈现多元化和个性化,自助旅游的人越来越多。许多游客在旅游行程中需要随时随地了解旅游景点有关的各类信息,如旅游景点介绍、推荐路线、地图导航等,合理规划和安排旅游线路。正是为了应对…

Docker | images镜像的常用命令总结

命令总结 1. 帮助启动类命令基本命令systemctl status dockerdocker infodocker --help 2. 镜像命令docker images删除镜像出现错误 docker searchdocker pull xxx[:TAG]docker images -adocker images -qdocker system dfdocker rmi -f xxxxxdocker rmi -f $(docker images -q…

Python量子生成对抗网络QGAN神经网络药物发现、多方法乳腺癌药物筛选应用

全文链接:https://tecdat.cn/?p37975 分析师:Chenhao Wu 在当今的医学领域,乳腺癌作为一种严重威胁女性健康的疾病,其治疗一直是科研工作者们关注的焦点。乳腺癌的发展与雌激素受体密切相关,其中 ERα 被视为治疗乳腺…

还愁布线呢?那是你没看过这篇

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 上午好,我的网工朋友 综合布线作为网工工作中的基础部分,其设计和实施的质量直接影响到整个系统的稳定性和可靠性。对于咱…

面了 minimax 大模型算法岗,问的贼细!

不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。 今天…

【架构】Service Mesh

文章目录 概述微服务架构对比Rainbond与ServiceMesh来源 概述 Service Mesh 公认的定义,是用以处理服务与服务之间通信的专用基础设施层。更本质的理解,它是服务治理平台,是业务逻辑解耦的必然产物,是数字经济背景下企业对研发效…

基于flask和neo4j的医疗知识图谱展示问答系统

如果你仍在为毕业设计的选题发愁,或者想通过技术项目提升专业实力,这个基于Flask和Neo4j的医疗知识图谱展示与问答系统,绝对是个不错的选择! 项目亮点大揭秘: 知识图谱与问答结合:我们采用了医疗场景下的知…

remote: HTTP Basic: Access denied

解决方法 输入: git config --system --unset credential.helper 再次进行 Git 操作,输入正确的用户名,密码即可。

STM32硬件平台

STM32 系列是 STMicroelectronics 设计的高度灵活、广泛应用的微控制器(MCU)系列,支持从低功耗应用到高性能处理的需求,适用于工业、汽车、消费电子和物联网等广泛领域。STM32 系列具有广泛的硬件种类和丰富的功能,以下…

OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 基于高斯混合模型的背景/前景分割算法。 该类实现了在文献[320]和[319]中描述的高斯混合模型背景减除。 cv::BackgroundSubtractorMOG2 类是 O…

基于GPT的智能客服落地实践

📍前言 在日常生活中,「客服」这个角色几乎贯穿着我们生活的方方面面。比如,淘宝买东西时,需要客服帮你解答疑惑。快递丢失时,需要客服帮忙找回。报名参加培训课程时,需要客服帮忙解答更适合的课程…… 基…

通过AWS Bedrock探索 Claude 的虚拟桌面魔力:让 AI 代替你动手完成任务!

前言 大家好,昨夜Anthropic 发布了更新。现在 Claude 3.5 Sonnet(V2) 和 Claude 3.5 Haiku,以及名为 computer use 的新功能已经作为公开测试版发布了。 Introducing computer use, a new Claude 3.5 Sonnet, and Claude 3.5 Ha…

【JavaEE】【多线程】线程池

目录 一、线程池二、ThreadPoolExecutor类讲解2.1 构造方法2.1.1 corePoolSize和maximumPoolSize2.1.2 KeepAliveTime和unit2.1.3 workeQueue2.1.4 threadFactory2.1.5 handler 三、简易构造线程池四、自己实现一个简单线程池 一、线程池 线程池:线程池可以简单理解…

DC-2靶机通关详解以及可能问题的解决

靶机下载地址:https://www.vulnhub.com/entry/dc-2,311/ 可能问题 出现如图的问题最大的可能是因为我们的VMware的版本过高,我们只需要降低一下版本就可以了。 找到虚拟机选项,点开其中的管理选项,然后选择更改兼容性。 直接下一…

双11买什么最划算?盘点双11必买好物合集

2024的“双11”购物狂欢节也是正式拉开帷幕,大家有没有物色到心仪的好物呢?每年的双11,都是数码家电爱好者的盛宴。在这个时候,各大品牌纷纷推出优惠活动,各种新品也层出不穷,正是入手这些商品的绝佳时机。…