附录G GDB命令速查表

发布时间:2026/7/27 7:15:45

附录G GDB命令速查表
附录G GDB命令速查表摘要GDBGNU Debugger是Linux/Unix系统下最强大的C/C调试器。本速查表整理了最常用的GDB命令帮助你快速定位和解决程序bug。使用前提# 编译时加-g选项生成调试信息gcc-g-O0-oprogram program.c1. 启动与退出命令说明示例gdb program启动GDB调试程序gdb ./myappgdb --args program arg1 arg2调试带参数的程序gdb --args ./server 8080gdb -p pid附加到运行中的进程gdb -p 12345gdb program core分析core dump文件gdb ./app core.12345quit或q退出GDB(gdb) quitrun或r开始运行程序(gdb) runrun arg1 arg2运行程序并传递参数(gdb) run input.txt2. 断点管理2.1 设置断点命令说明示例break function在函数入口设置断点(gdb) break mainbreak file:line在指定文件的行设置断点(gdb) break test.c:42break line在当前文件的行设置断点(gdb) break 100break *address在内存地址设置断点(gdb) break *0x400500break ... if condition条件断点(gdb) break main if argc 1tbreak location临时断点触发一次后删除(gdb) tbreak mainrbreak regex正则匹配函数名设置断点(gdb) rbreak ^test_.*2.2 查看和管理断点命令说明示例info breakpoints或i b列出所有断点(gdb) info breakpointsdelete n删除指定编号的断点(gdb) delete 2delete删除所有断点(gdb) deletedisable n禁用断点(gdb) disable 3enable n启用断点(gdb) enable 3clear location删除指定位置的断点(gdb) clear maincondition n expr为断点添加条件(gdb) condition 2 i100ignore n count忽略断点N次(gdb) ignore 2 102.3 观察点命令说明示例watch expr当表达式值改变时停止(gdb) watch countrwatch expr当表达式被读取时停止(gdb) rwatch *ptrawatch expr当表达式被读或写时停止(gdb) awatch buffer[0]info watchpoints列出所有观察点(gdb) info watchpoints3. 执行控制命令说明示例continue或c继续执行到下一个断点(gdb) continuenext或n单步执行不进入函数(gdb) nextstep或s单步执行进入函数(gdb) stepnexti或ni单步执行一条机器指令不进入(gdb) nextistepi或si单步执行一条机器指令进入(gdb) stepifinish或fin执行到当前函数返回(gdb) finishuntil执行到当前循环结束(gdb) untiluntil location执行到指定位置(gdb) until 100jump location跳转到指定位置执行(gdb) jump 50return [value]强制当前函数返回(gdb) return 04. 查看变量和内存4.1 打印变量命令说明示例print expr或p打印表达式的值(gdb) print iprint/format expr以指定格式打印(gdb) print/x ptrprint *ptr打印指针指向的值(gdb) print *headprint arr[0]10打印数组的10个元素(gdb) print arr[0]10print struct打印结构体(gdb) print studentdisplay expr每次停止时自动显示(gdb) display iundisplay n取消自动显示(gdb) undisplay 1info display列出所有自动显示(gdb) info display格式化输出格式说明示例/d十进制print/d var/x十六进制print/x ptr/o八进制print/o num/t二进制print/t flags/c字符print/c ch/f浮点数print/f pi/s字符串print/s str4.2 查看内存命令说明示例x/nfu addr查看内存(gdb) x/10xw 0x400000x/s str查看字符串(gdb) x/s messagex/10i $pc查看指令(gdb) x/10i $pcx命令格式说明n显示的单元数量f显示格式x十六进制, d十进制, u无符号, o八进制, t二进制, a地址, i指令, c字符, s字符串u单元大小b字节, h半字2字节, w字4字节, g巨字8字节示例(gdb) x/10xw 0x400000 # 以十六进制显示10个4字节字 (gdb) x/20xb buffer # 以十六进制显示20个字节 (gdb) x/10i main # 显示main函数开始的10条指令4.3 查看变量信息命令说明示例info locals显示当前函数的局部变量(gdb) info localsinfo args显示当前函数的参数(gdb) info argsinfo variables显示所有全局变量(gdb) info variableswhatis expr显示表达式的类型(gdb) whatis ptrptype expr显示表达式的详细类型(gdb) ptype student5. 调用栈命令说明示例backtrace或bt显示调用栈(gdb) backtracebacktrace full或bt full显示调用栈及局部变量(gdb) bt fullbacktrace 10只显示最近10帧(gdb) bt 10frame n或f n切换到指定栈帧(gdb) frame 2up切换到上一层栈帧(gdb) updown切换到下一层栈帧(gdb) downinfo frame显示当前栈帧信息(gdb) info frameinfo stack显示调用栈同backtrace(gdb) info stack调用栈示例(gdb) backtrace #0 func_c (ptr0x0) at test.c:10 #1 0x0000000000400567 in func_b (ptr0x0) at test.c:15 #2 0x0000000000400582 in func_a () at test.c:20 #3 0x000000000040059d in main () at test.c:256. 源代码查看命令说明示例list或l显示当前位置附近的代码(gdb) listlist function显示函数的代码(gdb) list mainlist file:line显示指定位置的代码(gdb) list test.c:42list start,end显示指定行范围的代码(gdb) list 10,20set listsize n设置list显示的行数(gdb) set listsize 20disassemble或disas反汇编当前函数(gdb) disassembledisassemble function反汇编指定函数(gdb) disas main7. 修改变量和内存命令说明示例set var value修改变量值(gdb) set var i 10set {type}addr value修改内存值(gdb) set {int}0x400000 100set $reg value修改寄存器值(gdb) set $rax 0call function(args)调用函数(gdb) call printf(test\n)8. 多线程调试命令说明示例info threads列出所有线程(gdb) info threadsthread n切换到指定线程(gdb) thread 2thread apply all bt显示所有线程的调用栈(gdb) thread apply all btthread apply all command对所有线程执行命令(gdb) thread apply all print iset scheduler-locking on只运行当前线程(gdb) set scheduler-locking onset scheduler-locking off运行所有线程(gdb) set scheduler-locking off9. 信号处理命令说明示例info signals列出所有信号的处理方式(gdb) info signalshandle signal action设置信号处理方式(gdb) handle SIGINT stopsignal signalnum向程序发送信号(gdb) signal SIGINT信号处理动作stop收到信号时停止nostop收到信号时不停止print收到信号时打印消息noprint收到信号时不打印消息pass将信号传递给程序nopass不将信号传递给程序10. 高级功能10.1 反向调试命令说明示例target record-full开始记录执行(gdb) target record-fullreverse-continue或rc反向继续执行(gdb) rcreverse-step或rs反向单步进入函数(gdb) rsreverse-next或rn反向单步不进入函数(gdb) rnreverse-finish反向执行到函数调用前(gdb) reverse-finish10.2 检查点命令说明示例checkpoint创建检查点(gdb) checkpointinfo checkpoints列出所有检查点(gdb) info checkpointsrestart n恢复到检查点(gdb) restart 1delete checkpoint n删除检查点(gdb) delete checkpoint 110.3 宏和脚本命令说明示例define cmdname定义GDB命令(gdb) define hellodocument cmdname为命令添加文档(gdb) document hellosource file执行GDB脚本文件(gdb) source debug.gdbmacro expand expr展开宏定义(gdb) macro expand MAX(a,b)11. 常用设置命令说明示例set print pretty on格式化打印结构体(gdb) set print pretty onset print array on格式化打印数组(gdb) set print array onset pagination off关闭分页(gdb) set pagination offset logging on开启日志记录(gdb) set logging onset logging file file设置日志文件(gdb) set logging file gdb.logshow variable显示设置的值(gdb) show print pretty12. 快捷键快捷键说明Enter重复上一条命令CtrlC中断程序执行CtrlD退出GDBTab命令自动补全CtrlL清屏CtrlP/↑上一条命令CtrlN/↓下一条命令13. 实用调试场景13.1 调试段错误# 1. 生成core dumpulimit-cunlimited ./program# Segmentation fault (core dumped)# 2. 用GDB分析gdb ./program core(gdb)backtrace# 查看崩溃时的调用栈(gdb)frame0# 切换到崩溃帧(gdb)info locals# 查看局部变量(gdb)print ptr# 检查指针值13.2 调试内存泄漏# 使用Valgrind配合GDBvalgrind--vgdbyes --vgdb-error0./program# 在另一个终端gdb ./program(gdb)target remote|vgdb13.3 调试多线程死锁(gdb) info threads # 查看所有线程 (gdb) thread apply all bt # 查看所有线程的调用栈 (gdb) thread 2 # 切换到线程2 (gdb) info frame # 查看当前帧信息 (gdb) print mutex # 检查锁的状态13.4 条件断点调试循环# 只在i1000时停止 (gdb) break loop.c:10 if i 1000 # 只在指针不为空时停止 (gdb) break process if ptr ! 0 # 只在字符串匹配时停止 (gdb) break handler if strcmp(name, test) 014. .gdbinit配置文件创建~/.gdbinit文件可以自动执行GDB命令# 美化输出 set print pretty on set print array on set print array-indexes on # 关闭分页 set pagination off # 历史记录 set history save on set history size 10000 set history filename ~/.gdb_history # 自动加载符号 set auto-load safe-path / # 定义快捷命令 define plist set $node $arg0 while $node print *$node set $node $node-next end end document plist 打印链表: plist head end15. 常见问题Q1: 为什么看不到源代码A: 编译时需要加-g选项gcc-g-O0-oprogram program.cQ2: 如何调试优化后的代码A: 使用-Og而不是-O2gcc-g-Og-oprogram program.cQ3: 如何在GDB中查看宏定义A: 编译时使用-g3gcc-g3-O0-oprogram program.c(gdb)macroexpandMAX(a, b)Q4: 程序运行太慢怎么办A: 使用条件断点或临时断点避免频繁停止。Q5: 如何保存GDB会话A: 使用日志功能(gdb) set logging on (gdb) set logging file session.log16. 快速参考卡片启动调试gdb program# 启动调试gdb-ppid# 附加到进程gdb program core# 分析core dump最常用命令必记r # 运行 b main # 在main设置断点 c # 继续执行 n # 单步执行不进入 s # 单步执行进入 p var # 打印变量 bt # 显示调用栈 l # 显示源代码 q # 退出调试流程设置断点 →break main运行程序 →run单步执行 →next/step查看变量 →print var查看调用栈 →backtrace继续执行 →continue相关章节第24章调试技术附录F常见运行时错误与调试技巧附录I指针使用速查表

相关新闻

Seedance 2.0双分支架构解析与工业级视频生成实践

Seedance 2.0双分支架构解析与工业级视频生成实践

2026/7/27 7:15:45

1. Seedance 2.0技术解析:从双分支架构到工业级视频生成作为一名长期从事AI视频生成落地的技术专家,当我第一次接触Seedance 2.0时,就被它的技术架构所震撼。这不仅仅是一次简单的模型升级,而是对整个视频生成范式的重构。让我们深…

TMS320C5x DSP架构、指令集与片上外设开发实战指南

TMS320C5x DSP架构、指令集与片上外设开发实战指南

2026/7/27 7:15:45

1. 项目概述与核心价值如果你在嵌入式信号处理领域摸爬滚打过一段时间,大概率绕不开德州仪器(TI)的TMS320系列。这个系列就像是DSP世界的“常青树”,而其中的C5x系列,特别是像TMS320C50、C51、C52这些型号,…

可控AI智能体的技术架构与产业实践

可控AI智能体的技术架构与产业实践

2026/7/27 7:05:44

1. 可控智能体的产业价值与技术挑战在当今人工智能技术快速发展的背景下,如何实现AI系统的安全可控部署已成为行业核心议题。GPT-OSS作为目前全球唯一的开源可控AI解决方案,其技术架构和产业落地路径值得深入探讨。1.1 可控智能体的定义与特征可控智能体…

Pot-Desktop:免费跨平台翻译软件终极指南,解决多语言工作难题

Pot-Desktop:免费跨平台翻译软件终极指南,解决多语言工作难题

2026/7/27 9:15:50

Pot-Desktop:免费跨平台翻译软件终极指南,解决多语言工作难题 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_…

AssemFormer与YOLO26结合:目标检测的进化与实战

AssemFormer与YOLO26结合:目标检测的进化与实战

2026/7/27 9:15:50

1. 从传统YOLO到AssemFormer:目标检测的进化之路 在计算机视觉领域,YOLO系列算法一直是目标检测任务的中流砥柱。作为一名长期从事目标检测研究的工程师,我见证了从YOLOv1到YOLOv5的迭代过程,也深刻体会到传统卷积神经网络在复杂场…

程序员就业:把方案拆到可执行

程序员就业:把方案拆到可执行

2026/7/27 9:15:50

聊《一份看似完整的程序员就业方案,为什么投递时没效果?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 摘要:2026 年的程序员就业市场,AI 编程工具&#xf…

2026年AI工具与提示词实战指南:AI牛马导航平台解析

2026年AI工具与提示词实战指南:AI牛马导航平台解析

2026/7/27 9:15:50

1. AI牛马导航平台:2026年AI工具与提示词的双重解决方案 在2026年的AI应用领域,一个显著的变化是:单纯拥有强大的AI工具已经不够,关键在于如何用精准的提示词(Prompt)激发这些工具的全部潜力。作为从业五年…

CANN算子库与ResNet残差连接优化实践

CANN算子库与ResNet残差连接优化实践

2026/7/27 9:15:50

1. CANN ops-nn算子库与ResNet残差网络概述 在深度学习领域,ResNet(残差网络)因其独特的残差连接设计而成为计算机视觉任务的基石模型。这种设计的核心在于引入了跨层连接,使得神经网络能够有效解决深度增加带来的梯度消失问题。而…

深入解析OMAP5912 USB OTG控制器:双角色设备与低功耗设计

深入解析OMAP5912 USB OTG控制器:双角色设备与低功耗设计

2026/7/27 9:05:50

1. 项目概述与核心价值在嵌入式系统,尤其是早期的移动计算和便携式设备领域,如何让一个设备既能作为U盘被电脑读取,又能作为读卡器去读取另一个U盘,是一个既基础又充满挑战的问题。这背后依赖的核心技术就是USB On-The-Go&#xf…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/27 8:45:59

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/27 8:42:17

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

2026/7/27 0:05:04

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计 一、多模态对话的「首字节延迟」:上传与流式的协同鸿沟 多模态 AI 应用的前端体验,往往卡在"首字节延迟"上。用户上传一张图片,提一个问题,然后盯着空白对…

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

2026/7/27 0:05:04

文章目录第一章 大众普遍存在的认知误区:水晶香薰是芳香烃结晶产物1.1 聚丙烯酸钠凝胶水晶珠体系(市面占比90%家用水晶香薰)1.2 无机盐硬质结晶载体:泻盐与钾明矾香薰原石1.3 植物多糖与PVA整块果冻型水晶香膏1.4 唯一特例&#x…

优启通3.7修改版:深度优化的PE系统维护工具

优启通3.7修改版:深度优化的PE系统维护工具

2026/7/27 0:05:04

1. 项目概述今天要跟大家分享的是一个经过深度优化的PE工具——优启通3.7(2025修改版)。这个版本是在原版基础上进行了大量功能增强和兼容性改进的12月最新版本,特别适合系统维护人员和电脑爱好者使用。作为一个长期从事IT运维的老兵&#xf…