当前位置: 首页 > news >正文

GDB Debug

  • 使用gdb带着参数启动程序

在gdb中启动程序并传递命令行参数:

gdb ./my_program  
(gdb) run arg1 arg2 arg3

这将在gdb中启动程序"my_program",并将参数"arg1"、"arg2"和"arg3"传递给程序。

在启动gdb之前,将参数存储在环境变量中,并在gdb中运行程序:

export MY_ARGS="arg1 arg2 arg3"  
gdb ./my_program  
(gdb) run $MY_ARGS

这将在gdb中启动程序"my_program",并将环境变量"MY_ARGS"中的参数传递给程序。

将参数存储在文件中,并在gdb中运行程序:

echo "arg1 arg2 arg3" > arguments.txt  
gdb ./my_program  
(gdb) run @arguments.txt

这将在gdb中启动程序"my_program",并将文件"arguments.txt"中的参数传递给程序。

gdb --args 命令用于指定要调试的程序的及其参数。该命令将程序和参数传递给 GDB(GNU Debugger),以便在调试会话中对其进行调试。以下是一个示例:

gdb --args program_name arg1 arg2 arg3

在上面的示例中,program_name 是要调试的程序的名称,arg1arg2 和 arg3 是程序的的可选参数。您可以在 gdb 命令后使用 --args 选项来指定程序和参数。在调试会话中,您可以使用其他 GDB 命令来检查和修改变量、观察程序执行流程等。

请注意,使用 --args 选项时,您需要确保在命令行中包含所有的程序参数,并且参数之间用空格分隔。如果参数包含空格或其他特殊字符,请使用引号将参数括起来。

例如,如果您的程序需要接受一个带引号的参数,您可以这样写:

gdb --args program_name "arg1 with quotes" arg2

这将把 "arg1 with quotes" 作为单个参数传递给程序,并将 arg2 作为另一个参数传递给程序。

注意,在使用这些方法时,您需要确保您的程序能够正确处理传递给它的参数。

  • gdb打印变量的值

print:打印变量的值。例如,print variable_name 将打印变量 variable_name 的值。

print /fmt variable_name:以指定的格式打印变量。fmt 可以是 f(十六进制浮点数)、o(八进制整数)、x(十六进制整数)或 d(十进制整数)。例如,print /f variable_name 将以浮点数格式打印变量 variable_name 的值。

  • gdb打印结构体变量或者结构体指针

打印结构体变量:

print struct_variable

这将打印结构体变量 struct_variable 的值。

打印结构体指针(或打印出结构体变量的所有成员):

print *struct_pointer

这将打印结构体指针 struct_pointer 所指向的结构体变量的值。

打印结构体指针的成员:

print struct_pointer->member_name

这将打印结构体指针 struct_pointer 所指向的结构体变量中成员 member_name 的值。

请注意,这些命令中的一些可能会因为所使用的GDB版本的不同而有所不同。如果您遇到问题,请参考GDB的文档或使用 help 命令获取更多帮助。

  • display 命令可以在 GDB 中显示变量的值。

可以使用以下语法

display variable_name

其中 variable_name 是您要显示的变量的名称。

例如,如果您要显示变量 x 的值,可以输入:

display x

每次程序停止时,GDB 将自动显示该变量的值。如果您想停止自动显示,可以使用 undisplay 命令。

此外,您还可以使用 display 命令显示表达式的值。例如:

display sizeof(int)

这将显示 int 类型的变量所占用的字节数。

display 命令与 print 命令类似,但它会自动显示变量的值,而不需要您每次手动输入。每次程序停止时,GDB 将自动显示该变量的值。如果您想停止自动显示,可以使用 undisplay 命令。

总的来说,print 命令用于手动显示变量的值,而 display 命令用于自动显示变量的值,特别是在调试会话期间经常使用。

在 GDB 的命令中,"/i" 选项用于以汇编格式显示指令。具体来说,它告诉 GDB 在显示指令时使用汇编语言。例如,使用 "x/i" 命令可以以汇编格式查看指定地址的指令。以下是一个示例:

(gdb) x/i 0x1234  
0x1234:    add    %eax,%eax

这将在地址 0x1234 上显示指令 "add %eax,%eax"。使用 "/i" 选项,GDB 会将指令以汇编语言形式显示,而不是以二进制形式显示。

display /i $pc :当用户想check 最后的崩溃点是,需要让栈处于 0号上下文, 然后输入该命令,

会显示出崩溃指令的内容(/20i, 以指令形式显示 pc指针及后续20行的汇编指令的内容)

(gdb) display /20i $pc1: x/i $pc=> 0x686042 <hal_i2c_mst_write+258>: ldrb r3, [r7, r5]... ...

再对应 info r 的输出结果,可以看到是什么数值最终引发了错误

  • gdb disassemble

disassemble 命令是 GDB(GNU Debugger)中的一个功能,用于显示当前函数的汇编代码。它可以将机器指令转换成易于阅读的汇编代码,以便于调试和分析程序。

要使用 disassemble 命令,您需要在 GDB 调试会话中进入您想要查看汇编代码的函数。然后,您可以输入 disassemble 或 dis 命令,再加上函数名称或函数地址。例如:

(gdb) disassemble main

这将显示函数 main 的汇编代码。您还可以使用函数地址来显示指定函数的汇编代码,例如:

(gdb) disassemble 0x1234

这将显示地址为 0x1234 的函数的汇编代码。

请注意,disassemble 命令可能因所使用的 GDB 版本而有所不同。如果您遇到问题,请参考 GDB 的文档或使用 help 命令获取更多帮助。

  • x 查看内存中的内容

x 命令是 GDB(GNU Debugger)中的一个命令,用于查看内存中的内容。该命令可以用于查看程序中的变量、数据和代码等。

x 命令的语法如下:

x/[N][SIZE] ADDRESS

其中,N 表示要查看的内存单元的数量,SIZE 表示每个内存单元的大小,ADDRESS 表示要查看的内存地址。

例如,要查看地址为 0x1234 的 4 个字节(一个整数)的值,可以输入:

x/i 0x1234

这将显示地址为 0x1234 的指令。

又如,要查看地址为 0x1234 的一个字(4 个字节)的值,可以输入:

x/4wx 0x1234

这将显示地址为 0x1234 的 4 个字(16 个字节)的值。

还可以使用 / 或 // 前缀来指定要查看的地址。例如,要查看地址为变量 x 的值,可以输入:

x/x &x

这将显示变量 x 的值。

  • display /i $pc:显示当前指令的汇编代码。其中,/i表示以汇编代码格式显示,$pc表示当前程序的计数器的值,也就是当前指令的地址。
  • x/x $pc:使用x命令查看当前指令的地址和汇编代码。其中,/x表示以十六进制格式显示,$pc表示当前程序计数器的值,也就是当前指令的地址。

相关文章:

GDB Debug

使用gdb带着参数启动程序 在gdb中启动程序并传递命令行参数&#xff1a; gdb ./my_program (gdb) run arg1 arg2 arg3 这将在gdb中启动程序"my_program"&#xff0c;并将参数"arg1"、"arg2"和"arg3"传递给程序。 在启动gdb之前&…...

【项目流程】前端项目的开发流程

1. 项目中涉及的所有角色及其职责 - PM 产品经理 产品经理&#xff08;Product Manager&#xff0c;简称PM&#xff09;负责明确和定义产品的愿景和战略&#xff0c;与客户、用户、业务部门和其他利益相关者进行沟通&#xff0c;收集并分析他们的需求和期望。负责制定产品的详…...

JS监听浏览器关闭、刷新及切换标签页触发事件

蛮简单的东西&#xff0c;知道就会&#xff0c;不知道就不会&#xff0c;没什么逻辑可言。简单记录一下&#xff0c;只为加深点儿印象。 visibilitychange visibilitychange可以监听到浏览器的切换标签页。 直接上代码&#xff1a; <script>document.addEventListe…...

Unity 引擎做残影效果——3、顶点偏移方式

Unity实现残影效果 大家好&#xff0c;我是阿赵。 继续讲Unity引擎的残影做法。这次的残影效果和之前两种不太一样&#xff0c;是通过顶点偏移来实现的。 具体的效果是这样&#xff1a; 与其说是残影&#xff0c;这种效果更像是移动速度很快时造成的速度线&#xff0c;所以在移…...

【Linux】权限

1、shell命令以及运行原理 Linux 严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ &#xff0c;但我们一般用户&#xff0c;不能直接使用 kernel。而是通过 kernel 的“外壳”程序&#xff0c;也就是所谓的shell&#xff0c;来与 k…...

Excel导入日期格式时自动转为五位数文本

问题描述&#xff1a;Excel导入数据时&#xff0c;当数据是日期可能会存在问题&#xff0c;日期格式转为文本了&#xff0c;例如“2023-07-31”接收时变为“45138”&#xff0c;导致后端解析日期出错&#xff0c;无法导入。 解决方法&#xff1a; 方法一&#xff1a;将Excel日…...

Mac使用brew安装软件报错

在使用brew安装软件时报错Failed to upgrade Homebrew Portable Ruby! brew install --cask --appdir/Applications docker> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:0cb1cc7af109437fe0e020c9f3b7b95c3c709b140bde9f991ad2c143…...

Android 实现MQTT客户端,用于门禁消息推送

添加MQTT依赖 implementation ‘org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2’ implementation ‘org.eclipse.paho:org.eclipse.paho.android.service:1.1.1’ 在Manifest清单文件中添加服务 <service android:name"org.eclipse.paho.android.service.Mq…...

跨境电商的广告推广怎么做?7个方法

在跨境电商竞争日趋激烈的市场环境下&#xff0c;跨境电商店铺引流成了制胜关键点。这里给大家分享一套引流推广的方法。 一、搜索引擎营销推广 搜索引擎有两个最大的优点是更灵活、更准确。搜索引擎营销的目标定位更精确&#xff0c;且不受时间和地理位置上的限制&#xff0…...

《Java-SE-第二十八章》之CAS

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…...

git之reflog分析

写在前面 本文一起看下reflog命令。 1&#xff1a;场景描述 在开发的过程中&#xff0c;因为修改错误&#xff0c;想要通过git reset命令恢复到之前的某个版本&#xff0c;但是选择提交ID错误&#xff0c;导致多恢复了一个版本&#xff0c;假定&#xff0c;该版本对应的内容…...

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了

1.简介 Fiddler最大的优势在于抓包&#xff0c;我们大部分使用的功能也在抓包的功能上&#xff0c;fiddler做接口测试也是非常方便的。 领导或者开发给你安排接口测试的工作任务&#xff0c;但是没有给你接口文档&#xff08;由于开发周期没有时间出接口文档&#xff09;&…...

Oracle open JDK和 Amazon Corretto JDK的区别

Oracle OpenJDK和Amazon Corretto JDK都是基于Java开放源代码项目的发行版&#xff0c;它们之间有一些区别。 1. 来源&#xff1a;Oracle OpenJDK是由Oracle公司领导和支持的&#xff0c;它是Java的官方参考实现之一。而Amazon Corretto JDK是由亚马逊公司开发和支持的&#xf…...

Spark写PGSQL分区表

这里写目录标题 需求碰到的问题格式问题分区问题&#xff08;重点&#xff09; 解决完整代码效果 需求 spark程序计算后的数据需要往PGSQL中的分区表进行写入。 碰到的问题 格式问题 使用了字符串格式&#xff0c;导致插入报错。 val frame df.withColumn("insert_t…...

Git 命令行登录

有时候登录命令行版本的git会出现这个错误 1remote: Support for password authentication was removed on August 13, 2021. 2remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for …...

性能分析记录

4实例压测TPS浮动在200-300 1.TPS浮动200-300&#xff0c;ART浮动的可能性是10-20ms&#xff0c;链路复杂是可接受的&#xff0c;链路简单则需要分析原因。 1&#xff09;缓存没命中&#xff0c;对某些账号缓存没命中&#xff0c;或缓存失效后导致隔段时间耗时升高。 2&…...

Java反射学习(大综合)

第一天 Java反射及动态代理... 2 一、 Java反射... 2 1、什么是反射&#xff1a;... 2 2、反射的原理... 2 3、反射的优缺点&#xff1a;... 2 4、反射的用途&#xff1a;... 3 5、反射机制常用的类&#xff1a;... 3 1、获得Class&#xff1a;主要有三…...

Vite+Vue3 开发UI组件库并发布到npm

一直对开源UI组件库比较感兴趣&#xff0c;摸索着开发了一套&#xff0c;虽然还只是开始&#xff0c;但是从搭建到发布这套流程基本弄明白了&#xff0c;现在分享给大家&#xff0c;希望对同样感兴趣的同学有所帮助。 目前我的这套名为hasaki-ui的组件库仅有两个组件&#xff0…...

vue- form动态表单验证规则-表单验证

前言 以element官网的form表单的-动态增减表单项为例讲解表单验证规则 动态的功能就是v-model配合push v-for 便利来实现的 我们需要熟知2个知识点prop表单验证需要跟v-model绑定的值是一样的&#xff0c; 如果是一个数组便利的表单&#xff0c;那就需要绑定这个数组每一项…...

FPGA学习—通过数码管实现电子秒表模拟

文章目录 一、数码管简介二、项目分析三、项目源码及分析四、实现效果五、总结 一、数码管简介 请参阅博主以前写过的一篇电子时钟模拟&#xff0c;在此不再赘述。 https://blog.csdn.net/qq_54347584/article/details/130402287 二、项目分析 项目说明&#xff1a;本次项目…...

如何用CubeMX+Keil快速搞定DS1302时钟驱动?超详细配置教程

STM32CubeMX与Keil协同开发&#xff1a;DS1302实时时钟模块高效驱动指南 1. 实时时钟模块选型与DS1302核心特性解析 在嵌入式系统设计中&#xff0c;实时时钟(RTC)模块的选择往往需要权衡精度、功耗和接口复杂度。DS1302作为一款经典的串行接口时钟芯片&#xff0c;以其独特的…...

不止写文章!用Gutenberg区块编辑器5分钟打造高转化落地页(实战案例)

用Gutenberg区块编辑器5分钟打造高转化落地页&#xff08;实战指南&#xff09; 在数字营销领域&#xff0c;落地页的转化率直接影响业务成败。传统建站工具要么过于复杂&#xff08;如Elementor、Divi&#xff09;&#xff0c;要么功能受限&#xff08;如经典编辑器&#xff0…...

5步让2008-2017款旧Mac免费升级最新macOS系统:OpenCore Legacy Patcher完整指南

5步让2008-2017款旧Mac免费升级最新macOS系统&#xff1a;OpenCore Legacy Patcher完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在使用20…...

gte-base-zh开源可部署优势:支持国产昇腾/寒武纪芯片适配路线

gte-base-zh开源可部署优势&#xff1a;支持国产昇腾/寒武纪芯片适配路线 1. 快速了解gte-base-zh模型 gte-base-zh是由阿里巴巴达摩院训练的中文文本嵌入模型&#xff0c;基于BERT框架构建。这个模型专门为中文文本处理设计&#xff0c;能够将文本转换为高质量的向量表示&am…...

Chandra OCR完整教程:从单图测试到企业级应用,全流程实战解析

Chandra OCR完整教程&#xff1a;从单图测试到企业级应用&#xff0c;全流程实战解析 1. Chandra OCR核心能力解析 Chandra OCR是Datalab.to在2025年开源的一款革命性文档识别工具&#xff0c;与传统OCR相比具有三大突破性优势&#xff1a; 布局感知&#xff1a;不仅能识别文…...

DownKyi完全指南:3步掌握B站视频下载与管理的终极技巧

DownKyi完全指南&#xff1a;3步掌握B站视频下载与管理的终极技巧 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#…...

ATCODER ABC C题解蚁

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

GLM-OCR企业级多模态应用展示:结合视觉与文本理解复杂图表

GLM-OCR企业级多模态应用展示&#xff1a;结合视觉与文本理解复杂图表 你是不是也遇到过这种情况&#xff1f;拿到一份满是图表的业务报告&#xff0c;想快速提取里面的关键数据&#xff0c;却只能对着屏幕手动敲键盘&#xff0c;或者用传统的OCR工具识别出一堆零散的文字&…...

阿姆智创15.6寸嵌入式工控一体机,赋能机器视觉与产线数字化生产

在工业自动化与工厂数字化深度融合的时代&#xff0c;嵌入式工控一体机已成为连接设备、数据与人机交互的核心硬件载体。阿姆智创15.6寸嵌入式工控一体机&#xff0c;凭借稳定可靠的工业级性能、丰富齐全的系统接口、紧凑灵活的嵌入式设计&#xff0c;适配机器视觉设备与MES/ES…...

“TinyVue Skill:让 AI 真正懂你的组件库” 是 OpenTiny 团队针对 AI 智能体(Agent)开发的一套**技能工具集**

“TinyVue Skill&#xff1a;让 AI 真正懂你的组件库” 是 OpenTiny 团队针对 AI 智能体&#xff08;Agent&#xff09;开发的一套技能工具集。它的核心目标是解决通用大模型在生成 TinyVue 代码时容易出现的“幻觉”问题&#xff08;如 API 记错、版本不兼容&#xff09;&…...