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/11/2 18:21:47 阅读更多 →
个人笔记:实用机器学习(b站李沐)2.3

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

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

2026/11/4 0:17:13 阅读更多 →
MGF矩生成函数实战指南:从分布编码到工业级建模

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

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

2026/11/2 12:27:52 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/5 1:08:50 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/5 0:54:28 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/4 19:19:54 阅读更多 →

日新闻

周新闻

月新闻