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
是要调试的程序的名称,arg1
、arg2
和 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中启动程序并传递命令行参数: gdb ./my_program (gdb) run arg1 arg2 arg3 这将在gdb中启动程序"my_program",并将参数"arg1"、"arg2"和"arg3"传递给程序。 在启动gdb之前&…...

【项目流程】前端项目的开发流程
1. 项目中涉及的所有角色及其职责 - PM 产品经理 产品经理(Product Manager,简称PM)负责明确和定义产品的愿景和战略,与客户、用户、业务部门和其他利益相关者进行沟通,收集并分析他们的需求和期望。负责制定产品的详…...
JS监听浏览器关闭、刷新及切换标签页触发事件
蛮简单的东西,知道就会,不知道就不会,没什么逻辑可言。简单记录一下,只为加深点儿印象。 visibilitychange visibilitychange可以监听到浏览器的切换标签页。 直接上代码: <script>document.addEventListe…...

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

【Linux】权限
1、shell命令以及运行原理 Linux 严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用 kernel。而是通过 kernel 的“外壳”程序,也就是所谓的shell,来与 k…...
Excel导入日期格式时自动转为五位数文本
问题描述:Excel导入数据时,当数据是日期可能会存在问题,日期格式转为文本了,例如“2023-07-31”接收时变为“45138”,导致后端解析日期出错,无法导入。 解决方法: 方法一:将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个方法
在跨境电商竞争日趋激烈的市场环境下,跨境电商店铺引流成了制胜关键点。这里给大家分享一套引流推广的方法。 一、搜索引擎营销推广 搜索引擎有两个最大的优点是更灵活、更准确。搜索引擎营销的目标定位更精确,且不受时间和地理位置上的限制࿰…...

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

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

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了
1.简介 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的。 领导或者开发给你安排接口测试的工作任务,但是没有给你接口文档(由于开发周期没有时间出接口文档)&…...
Oracle open JDK和 Amazon Corretto JDK的区别
Oracle OpenJDK和Amazon Corretto JDK都是基于Java开放源代码项目的发行版,它们之间有一些区别。 1. 来源:Oracle OpenJDK是由Oracle公司领导和支持的,它是Java的官方参考实现之一。而Amazon Corretto JDK是由亚马逊公司开发和支持的…...

Spark写PGSQL分区表
这里写目录标题 需求碰到的问题格式问题分区问题(重点) 解决完整代码效果 需求 spark程序计算后的数据需要往PGSQL中的分区表进行写入。 碰到的问题 格式问题 使用了字符串格式,导致插入报错。 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,ART浮动的可能性是10-20ms,链路复杂是可接受的,链路简单则需要分析原因。 1)缓存没命中,对某些账号缓存没命中,或缓存失效后导致隔段时间耗时升高。 2&…...

Java反射学习(大综合)
第一天 Java反射及动态代理... 2 一、 Java反射... 2 1、什么是反射:... 2 2、反射的原理... 2 3、反射的优缺点:... 2 4、反射的用途:... 3 5、反射机制常用的类:... 3 1、获得Class:主要有三…...

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

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

FPGA学习—通过数码管实现电子秒表模拟
文章目录 一、数码管简介二、项目分析三、项目源码及分析四、实现效果五、总结 一、数码管简介 请参阅博主以前写过的一篇电子时钟模拟,在此不再赘述。 https://blog.csdn.net/qq_54347584/article/details/130402287 二、项目分析 项目说明:本次项目…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...