gdb 常用指令
gdb 常用指令1. 功能描述GDBGNU Debugger是 Linux 下最常用的 C/C 调试器支持断点调试、变量查看、调用栈追踪、内存检查、多线程调试、远程调试和 Core Dump 分析。1.1 核心能力能力说明断点调试行断点、函数断点、条件断点、临时断点、硬件断点单步执行step进入函数、next跳过函数、finish跳出函数变量查看打印变量值、结构体展开、数组/指针内容、自动显示调用栈分析查看调用栈、切换栈帧、查看局部变量和参数内存/寄存器按地址查看内存内容、查看/修改寄存器值多线程调试线程切换、线程级断点、查看所有线程栈远程调试gdbserver 方式调试嵌入式/远程目标Core Dump分析程序崩溃后生成的 core 文件还原崩溃现场2. 调试前准备编译时必须加-g生成调试信息建议关闭优化-O0避免变量被优化掉gcc-g-O0main.c-omain# 单文件g-g-O0main.cpp-omain# Ccmake-Bbuild-DCMAKE_BUILD_TYPEDebug# CMake 项目3. 启动与退出3.1 启动 gdbgdb program# 直接启动gdb--argsprogram arg1 arg2# 带参数启动gdb-pPID# 附加到运行中的进程gdb program core.12345# 分析 Core Dumpgdb program-ccore.12345# 同上另一种写法启动后可设置参数set args arg1 arg2 # 设置程序参数 show args # 查看当前参数3.2 退出 gdbquit # 简写 q退出 gdb4. 运行控制命令简写说明runr从头开始运行程序start—开始执行并在 main 入口暂停continuec继续执行到下一个断点nextn单步执行不进入函数内部steps单步执行进入函数内部finishfin执行到当前函数返回untilu运行到指定行等价于临时一次性断点killk终止正在调试的程序run file—重定向输出到文件5. 断点管理5.1 设置断点命令说明b 10当前文件的第 10 行b main.c:20指定文件的行b func函数入口b *addr指定地址如b *0x400500b 5当前执行位置往后 5 行b -5当前执行位置往前 5 行tb func临时断点命中一次后自动删除hbreak func硬件断点适用 ROM 中调试5.2 条件断点命令说明b 10 if i 5第 10 行条件成立才暂停b func if x 100函数入口条件断点b main.c:20 if strcmp(s, “err”) 0字符串条件condition 2 i 5给 2 号断点追加/修改条件condition 2移除 2 号断点的条件5.3 管理断点命令说明info b查看所有断点含编号、类型、命中次数enable启用所有断点enable 2启用 2 号断点enable once 2启用 2 号断点命中一次后禁用enable delete 2启用 2 号断点命中后删除disable禁用所有断点disable 2禁用 2 号断点d删除所有断点d 2删除 2 号断点ignore 2 10跳过 2 号断点前 10 次命中save breakpoints file保存断点到文件source file从文件恢复断点5.4 监视点命令说明watch var变量被写入时暂停rwatch var变量被读取时暂停awatch var变量被读写时均暂停info watch查看所有监视点监视点与断点共享同一编号空间管理命令相同enable/disable/delete。6. 查看信息6.1 查看变量命令简写说明print varp var打印变量值p /x var—十六进制打印p /t var—二进制打印p /c var—字符打印p /f var—浮点打印p /a var—打印地址p *ptr—解引用指针p *ptr10—打印指针指向的 10 个元素数组p sizeof(var)—打印变量大小p strlen(str)—调用函数前提编译带了足够符号信息set var value—修改变量值display var—每次停顿时自动打印变量undisplay 编号—取消自动显示info display—查看所有自动显示项info locals—查看当前栈帧所有局部变量info args—查看当前函数参数6.2 查看内存命令说明x /4xb addr按十六进制字节显示 4 个单元x /10xw addr按十六进制字4 字节显示 10 个单元x /s addr以字符串形式显示x /i addr以汇编指令形式显示格式x /NFU addr—— N数量F格式(x/d/o/t/s/i)U单位(b/h/w/g1/2/4/8 字节)。6.3 查看寄存器命令说明info registers查看所有通用寄存器info all-registers查看所有寄存器含浮点/向量p $rax打印单个寄存器值set $rax value修改寄存器值6.4 查看源码命令说明list / l显示当前行附近的源码l 20显示第 20 行附近l main.c:30显示指定文件的第 30 行附近l func显示函数源码l 10,30显示 10~30 行set listsize 50设置 list 每次显示行数6.5 查看调用栈命令简写说明backtracebt显示完整调用栈bt full—显示调用栈 每层局部变量bt 5—只显示最内层 5 帧frame nf n切换到第 n 帧up—切换到上一层调用者down—切换到下一层被调用者info frame—当前栈帧详细信息含局部变量、参数、寄存器6.6 查看线程命令说明info threads查看所有线程含编号、运行状态、所在函数thread n切换到 n 号线程thread apply all bt打印所有线程的调用栈thread apply n bt打印 n 号线程的调用栈thread apply all bt full打印所有线程的完整调用栈7. 多线程调试命令说明set scheduler-locking off所有线程同时运行默认set scheduler-locking on只运行当前线程其他线程暂停set scheduler-locking stepstep/next 时只运行当前线程continue 时全部运行show scheduler-locking查看当前锁定模式b func thread 3只在 3 号线程命中此断点set follow-fork-mode parentfork 后调试父进程set follow-fork-mode childfork 后调试子进程8. 信号处理命令说明info signals查看所有信号的 gdb 处理方式handle SIGSEGV stop收到 SIGSEGV 时暂停程序handle SIGSEGV noprint收到 SIGSEGV 时不打印信息handle SIGSEGV nostop收到 SIGSEGV 时不暂停跳过handle SIGINT pass将 SIGINT 传递给程序CtrlC 中断signal SIGUSR1向被调试程序发送信号9. Core Dump 调试# 启用 core dumpulimit-cunlimitedechocore.%p/proc/sys/kernel/core_pattern# 分析 core 文件gdb program core.12345bt # 查看崩溃时的调用栈 bt full # 查看调用栈 局部变量 f 3 # 切换到第 3 帧查看该层变量 p var # 在指定栈帧查看变量值 info registers # 查看崩溃时寄存器状态10. 常用命令速查# 启动gdb program# 调试可执行文件gdb--argsprogram arg1 arg2# 带参数启动gdb-pPID# 附加运行中进程gdb program core.12345# 分析 core dump# 运行r / run# 从头运行c /continue# 继续执行n / next# 单步不进入函数s / step# 单步进入函数fin / finish# 执行到函数返回u /until行号# 运行到指定行# 断点b 行号/函数名# 设断点b 位置if条件# 条件断点tb 位置# 临时断点watchvar# 监视变量写入info b# 查看所有断点enable/disable/delete 编号# 管理断点# 查看p var# 打印变量p /x var# 十六进制p *ptr10# 打印数组display var# 自动显示bt# 调用栈bt full# 调用栈局部变量info locals# 局部变量info threads# 所有线程info registers# 寄存器l# 查看源码x /10xw addr# 查看内存# 修改setvarvalue# 修改变量值setargs arg1 arg2# 设置程序参数# 退出q / quit# 退出 gdb

相关新闻

APP性能优化:HTTP DNS技术解析与美图实践

APP性能优化:HTTP DNS技术解析与美图实践

1. 为什么APP需要DNS优化?移动互联网时代,用户体验已经成为决定APP成败的关键因素。你可能不知道,用户在打开APP时,平均有15-20%的时间花费在DNS解析上。这个看似微小的环节,却直接影响着用户的第一印象。DNS解析就像是…

2026/7/18 4:09:24 阅读更多 →
个人笔记:实用机器学习(b站李沐)2.3

个人笔记:实用机器学习(b站李沐)2.3

2.3数据变换(变形) 原始数据往往不符合模型输入要求,数据转换是连接"清洗后的数据"和"可训练的特征"之间的桥梁,针对不同数据类型有特定方法。 *对数据整体进行操作变形特征值归一化处理: &#x…

2026/7/18 4:09:24 阅读更多 →
MGF矩生成函数实战指南:从分布编码到工业级建模

MGF矩生成函数实战指南:从分布编码到工业级建模

1. 这不是数学考试,而是你手头真实问题的“信号解码器”你有没有遇到过这样的场景:在做A/B测试时,发现两组用户留存率的分布形态很怪——不是对称的钟形,而是明显右偏,尾部拖得很长;或者在建模用户生命周期…

2026/7/18 4:09:24 阅读更多 →

最新新闻

Java集合框架:List与Set核心特性与实战对比

Java集合框架:List与Set核心特性与实战对比

1. Java集合框架核心解析:List与Set深度对比刚接触Java集合框架时,很多开发者会对List和Set这两个最常用的容器接口感到困惑。我在实际项目开发中踩过不少坑,比如用ArrayList存储需要去重的数据,结果导致业务逻辑出错。今天我们就…

2026/7/18 4:55:40 阅读更多 →
计算机安全导论核心知识点与解题思路解析

计算机安全导论核心知识点与解题思路解析

1. 计算机安全导论课程概述深圳大学计算机安全导论作为计算机科学与技术专业的核心基础课程,主要培养学生对信息安全基础概念、原理和技术的系统认知。这门课程通常在大二或大三开设,是后续网络安全、密码学等专业课程的前置必修课。课程内容涵盖计算机安…

2026/7/18 4:55:40 阅读更多 →
C++二维数组鞍点查找算法详解:从原理到代码实现

C++二维数组鞍点查找算法详解:从原理到代码实现

1. 项目概述:什么是二维数组的鞍点?在C编程和算法学习的路上,二维数组是绕不开的基础数据结构。处理二维数组的题目,往往能很好地锻炼我们的逻辑思维和代码实现能力。今天要聊的“鞍点”,就是一个非常经典且能检验基本…

2026/7/18 4:55:40 阅读更多 →
加密通讯原理与应用:从生活场景到技术实践

加密通讯原理与应用:从生活场景到技术实践

1. 加密与通讯的平民化解读上周邻居老王突然问我:"你们搞IT的天天说加密通讯,到底是个啥玩意儿?"这问题让我意识到,很多看似高深的技术概念,其实完全可以用生活化的方式讲明白。今天我就用最接地气的方式&am…

2026/7/18 4:55:40 阅读更多 →
SpringCloud Gateway与Sa-Token整合实现微服务鉴权

SpringCloud Gateway与Sa-Token整合实现微服务鉴权

1. 项目背景与核心价值在微服务架构中,网关作为系统流量的统一入口,承担着路由转发和权限控制的双重职责。传统方案中,开发者常采用Spring Security进行鉴权,但其配置复杂度高、学习曲线陡峭。而Sa-Token作为轻量级Java权限认证框…

2026/7/18 4:55:40 阅读更多 →
C++宿舍管理系统实战:从面向对象设计到文件持久化完整解析

C++宿舍管理系统实战:从面向对象设计到文件持久化完整解析

1. 项目概述与核心价值最近在整理过去的项目资料,翻到了一个大学时期和几个同学一起搞的C宿舍管理系统。当时做这个项目,一方面是课程设计的要求,另一方面也是想真刀真枪地练练手,把书本上的面向对象、数据结构、文件I/O这些知识串…

2026/7/18 4:54:40 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻