GDB的使用

【GDB】gdb的原理和使用 coredump,核心转储文件,程序运行过程中发生异常退出时,操作系统把程序当前的内存状态存储在core文件中,称为coredump。gdb符号表是gdb在调试过程中使用的一种数据结构,包含了程序中函数、变量等信息,用于在gdb调试过程中进行符号解析和地址定位。函数符号表:包含程序中定义的函数名称、参数、返回值等信息;变量符号表:包含程序中定义的变量名称、类型、作用域等信息;类型符号表:包含程序中定义的数据类型,例如结构体、枚举、类型别名等;地址映射表:将程序中的虚拟地址映射到物理地址。 阅读详情
1.启动和退出GDB
 [root@localhost ~]#gdb test

启动GDB调试test程序

[root@localhost ~]# gdb programe 2146

启动GDB调试进程号为2146的进程


[root@localhost ~]# gdb

(gdb) attach 2146

启动GDB挂载到进程号为2146的进程上开始调试


(gdb) detach 2146

释放进程号为2146的进程,终止调试


(gdb)set args –a –b123 -c

(gdb)show args

设置和查看被调试程序的启动参数


(gdb)run

(gdb)kill

启动和停止当前被调试程序,run命令也可跟参数

(gdb)quit

终止调式,退出GDB


 2.查看源代码

(gdb)list 123

查看当前源代码文件中123行及其前后5行的代码

 

(gdb)list abc.cpp : 123

查看源文件abc.cpp中123行及其前后5行的代码

 

(gdb)list foo

查看函数foo起始行及其前后5行的代码

 

(gdb)list abc.cpp : foo

查看源文件abc.cpp中函数foo起始行及其前后5行的代码

 

(gdb)list 0xabcd1234

查看包含0xabcd1234地址的代码行及其前后5行的代码


3.流程控制 

(gdb)s

单步执行


(gdb)n

单步执行,但不展开函数调用


(gdb)c

继续执行


(gdb)u

执行至循环结束


(gdb)u 123

执行至123行


(gdb)finish

跳出当前函数


(gdb)bt

查看当前函数调用堆栈


(gdb)frame 3

跳转到函数堆栈中索引为3的函数上下文


4.GDB的数据显示格式

x 按十六进制显示

d 按十进制显示

u 显示32位无符号整型。

o 按八进制显示

t 按二进制显示

a 按地址显示

c 按字符显示

f 按浮点数显示

s 按字符串显示


5.查看变量和数组

(gdb)p foo

查看变量foo的值


(gdb)p *bar

查看指针bar所指对象内容


(gdb)p/x foo

按十六进制查看变量foo的值


(gdb)p bar@10

查看数组bar的10个元素


(gdb)ptype foo

查看foo的类型定义


6.查看内存内容

x命令格式:x/[count][format][size] address

size可以是b(byte), h(halfword), w(word), g(giant, 8 bytes)


(gdb)x/10ub ptr

按无符号整形从ptr所指地址开始输出10字节


(gdb)x/5xw ptr

按16进制从ptr所指地址开始输出5个字(10字节)


7.设置断点

(gdb)b 123

在当前源文件的123行设置断点


(gdb)b abc.cpp : 123

在源文件abc.cpp的123行设置断点


(gdb)b foo

在全局函数foo设置断点


(gdb)b foo::bar

在类foo的成员函数bar设置断点


(gdb)b ns::foo::bar

在命名空间ns中的类foo的成员函数bar设置断点


(gdb)b 123 if foo == 1 && bar == 0

在当前源文件123行设置断点,并且当foo等于1且bar等于0时才命中

 

7.管理断点

(gdb)info b

查看所有断点信息


(gdb)d

删除所有断点


(gdb)d 2

删除2号断点


(gdb)enable 1

打开1号断点


(gdb)disable 5

禁用5号断点


8.多线程

(gdb)info threads

查看线程表


(gdb)thread 2

切换到线程表中索引为2的线程


(gdb)b foo 2

在函数foo设置断点,并且只在索引为2的线程中命中


(gdb)set follow-fork-mode parent

当fork调用发生时,继续调试父进程


(gdb)set follow-fork-mode child

当fork调用发生时,继续调试子进程

转自:http://blog.sina.com.cn/s/blog_60bfd6400100eola.html

gdb 教程 GDB 学习记录 阅读详情

相关推荐

深入解析gdb -p 与gdb attach 的区别与使用场景

在Linux系统中,GDB(GNU Debugger)是一款功能强大的调试工具,广泛应用于程序开发和调试过程。在使用GDB进行调试时,我们常常需要将GDB附加到正在运行的进程上。本文将对比两种附加进程的方法:gdb -p 和gdb attach ,分析它们的区别和使用场景。本文详细对比了gdb -p 与gdb attach 的使用方法、场景及优缺点。摘要:本文将详细对比gdb -p 与gdb attach 这两个命令的使用方法、场景及优缺点,帮助读者更好地理解并运用这两个调试工具。

scoone的博客 2239

gdb 根据函数地址 找 对应的函数名

GDB调试 根据函数地址 找 对应的函数名

qq_37659294的博客 3717

【GDB】一文掌握 GDB 详细用法(GDB 命令速查)

GDB(GNU Debugger)是Linux/Unix系统下强大的命令行调试工具,用于分析程序运行时的内存状态、执行流程和故障定位。就会被压入栈中,栈帧包含了该函数的局部变量、参数、返回地址和其他信息,当函数执行完毕后,这个栈帧会被弹出栈并销毁。调用的函数如果存在全局变量、静态变量的修改,在函数返回后会恢复到调用之前的值,这两个调用不会影响程序的状态。显示运行时将要或已经传递给程序的参数。每当一个函数被调用时,一个新的栈帧。在启动进程前,添加环境变量。在启动进程前,清除环境变量。连接到正在运行的进程。

数据知道的博客 1万+

gdb调试快速入门

Linux 调试 – gdb使用 背景 程序的发布方式有两种,debug模式和release模式,debug版本程序内会保存调试信息,容量会比release版本大,效率也会比release版本低。 程序发布到用户手里使用的都是release版本,编译器对其做了大量的优化,容量减小 效率提高。 Liunx gcc/g++ 编译出来的二进制程序,默认是release模式,需要加上-g 选项才能是debug版本。 常用操作 list / l 行号:显示源代码。 list / I 函数名:列出某个函数的源码

juggte的博客 1243

【GDB】——用 python 扩展 gdb

gdb.parse_and_eval 接受一个字符串作为表达式,并以 gdb.Value 的形式返回表达式求值的结果。那么 gdb.parse_and_eval(‘i + 1’) 的结果是一个 gdb.Value 的实例,其 value 属性的值为 4。如果想把输出结果转存到字符串中,设置 to_string 为 True:gdb.execute(cmd, to_string=True)。当我们通过 python 接口跟这些值打交道时,gdb 会把它们包装成一个 gdb.Value 对象。

tyustli 1989

MAC 青花瓷(Charles)爪机HTTPS 抓包

前段时间跟之前的产品小姐姐聊天,小姐姐说开发让她抓包帮忙看下数据,然而自己又不会,那就来写一篇简易版的教程 冲冲冲! 手上只有mac电脑跟iPhone手机,只做苹果手机的抓包,android7.0以上版本也没法通过正常的抓htts的包,让安卓开发装个后门吧,不是安卓开发并不知道是啥,连上USB之后访问chrome://inspect/#devices就能很简单的抓包 一、准备工具等 青花瓷...

Promise的博客 1613

gdb 常用命令

run/r 运行 运行带参数的可执行文件:r 后面接参数,例如: $ gdb executablefile (gdb) r arg1 arg2 arg3 continue/c 继续运行 next/n 单步运行 step/s 如果有函数则进入函数执行 finish 跳出当前的函数 jump/j 跳转到指定行/地址后继续执行,因此如果在跳转的目标行上如果没有设置断点,会继续往下执行 ...

fish的专栏 1万+

SAP S4业务伙伴(BP)实战指南:从角色分配到数据同步的完整流程

本文详细解析了SAP S4业务伙伴(BP)功能,从基础概念到实战操作,涵盖角色分配、数据同步及常见问题排查。通过BP机制,企业可高效管理客户、供应商等多重身份,实现数据共享和动态切换,显著提升主数据管理效率。特别适合SAP实施顾问和ERP管理员参考。

y2z3a4b5c的博客 869

用gdb查看指定地址的内存内容

用gdb查看指定地址的内存内容

firstime_tzjz的专栏 2696

基于聚类特征工程的水果销量预测:聚类算法对比与多模型评估

水果销量预测研究:聚类分群与多模型对比 摘要 本研究提出了一种融合聚类分析与机器学习的水果销量预测方法。基于包含12个维度的销售数据集,首先采用K-Means、BIRCH和DBSCAN三种聚类算法对水果品类进行分群,通过轮廓系数等指标评估显示BIRCH算法表现最优(0.387)。随后针对不同群组构建差异化特征工程,并比较XGBoost、LightGBM和LSTM三种预测模型性能。实验结果表明:基于聚类特征工程的LightGBM模型预测效果最佳(RMSE=2.34,R²=0.87).

huanghm88的专栏 137

通俗易懂的Harris 角点检测

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达Harris 角点检测 认为特征点具有局部差异性。如何描述“特征点具有局部差异性”:以每一个点为中心,取一个窗口,窗口大小为5*5...

3D视觉工坊 1473

用GDB调试程序

用GDB调试程序<!-- If you want a menu, uncomment the following lines andput (require emacs-wiki-menu) in your Emacs setup somewhere.-->function showToolTip(machaine) { if (machaine != "") {

发芽的石头 1772

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

fxshy的博客 462

【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)

GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于以后想称为一个Linux下工作的c/c++程序员,GDB是必不可少的工具,所以本篇来从零讲解GDB在LInux的调试。 对于GDB调试器来说,不像VS编译器中那样的图形化界面形式,而是采用纯命令行的形式进行调试。so 在开始学习的时候,大家可能会感觉晦涩难懂,但是这是C/C++程序员必须要掌握的技能,所以我将手把手进行零基础的讲解,本篇以C语言来讲解和调试。

weixin_45031801的博客 13万+

2025.06.16【转录组】|Ribo-seq数据流程详解(二 基因组比对)

本文详细介绍了Ribo-seq数据分析中的比对流程,包括环境准备、STAR索引构建、比对参数设置及结果统计可视化。通过samtools和R脚本实现比对质量评估,提供常见问题解决方案和关键指标解读。该流程强调比对参数优化和质量控制,为后续翻译组学分析奠定基础。

1977

华为OD机试 - 不含101的数(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。小明在学习二进制时,发现了一类不含101的数,也就是:现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?输入的唯一一行包含两个正整数。输出的唯一一行包含一个整数,表示在区间内一共有几个不含101的数。8 1668 → “1000”

学Java,找哪吒 1250

gdb的使用

进入gdb;list/l 行号;r;break/b 行号;info break;delete breakpoints;disable breakpoints 和enable breakpoints;n或next等

m0_73372323的博客 3316

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

这篇文章分享了UE5 VR项目的性能优化经验。作者通过对比UE4和UE5的VR模板性能,发现UE5默认帧率只有45FPS,远低于UE4的100FPS。主要性能瓶颈来自Lumen全局光照、虚拟阴影贴图等新特性。文章详细列出了12项关键优化设置,包括禁用Lumen、关闭虚拟阴影、使用前向渲染等,并分析了各项调整对性能的影响程度。特别指出删除默认的VolumetricCloud可立即提升5帧。最后建议根据场景需求平衡画质与性能,对于高帧率要求的VR项目,可能需要谨慎使用UE5或关闭其部分高级渲染功能。

TxNet 1382

GDB使用教程

1、GDB介绍 2、debug和release的区别(参考) 3、基本使用hello world(参考) 4、GDB调试命令总结(参考) 5、在cmake中使用GDB 1、GDB介绍 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比...

蓬莱道人的博客 8283

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

如何使用GDB调试

文章目录一、GDB的介绍二、GDB的使用三、使用GDB调试实际例子 一、GDB的介绍 GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。 二、GDB的使用 GDB的使用条件 程序要用GDB调试,需要添加调试信息。 添加方法: gcc的-g选项为程序添加调试信息。 例如:gcc –g –o helloworld helloworld.c 启动GDB 启动方法: gdb [程序名称

Harriet的博客 6556

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

linux GDB and GDB Sever

GDB(GNU Debugger)是一个用于调试程序的强大工具。它是GNU项目的一部分,支持多种编程语言,包括C、C++等。GDB 提供了一组命令和功能,允许跟踪检查程序的内部状态,跟踪代码的执行过程,以及定位和修复程序中的错误。:set follow-fork-mode parent 是 GDB 的一个命令,用于在多进程调试时控制在 fork() 调用之后 GDB 应该跟踪哪个进程。问题出在:函数accessInvalidMemory,代码的第五行。前面是单子进程的调试。

weixin_42271802的博客 1574

【调试】GDB使用总结

bt fullbt full Nbt full -N用define可以自定义命令,用document可以给自定义的命令加说明,利用help 命令名可以查看定义的命令。define 命令名命令…………enddocument 命令名说明endhelp 命令名以下示例定义了名为li的命令。本文只是对gdb命令脚本做了一个粗浅的介绍,旨在起到抛砖引玉的效果。

嵌入式与Linux那些事的博客 4335

使用gdb调试Python程序

前言不知各位有木有遇到这样的情况,生产环境下的Python进程突然卡死了,所有其他线程都无法调度,如果我们kill掉重启,通常会丧失掉当前报错的上下文信息,失去这些信息,对后续报错定位不太友好,能不能在不关停Python程序的情况下,看看程序发生了什么问题?首先,你可以尝试一下,此前我提过的py-spy(漫画:如何分析运行中的 Python 程序?),py-spy可以打印...

weixin_30230009的博客 1万+

gdb 入门使用

官方文档 http://sourceware.org/gdb/current/onlinedocs/gdb/ 确定文件是否可以gdb调试 gdb 直接调试查看 没有调试信息 not gdb.png readelf 查看段信息 file命令查看strip 如果最后是stripped,则说明该文件的符号表信息和调试信息已被去除,不能使用gdb调试。但是not stripped的情况并不能说明能够被调试。 使用GDB调试 编译时使用-g编译选项 $ g..

择一事终一生 1147
上一篇: gdb 调试不能显示全长字符串
下一篇: 简介超链接
goingstudy
博客等级 码龄17年 8粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值