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

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

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

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

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

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

2026/7/23 9:10:25 阅读更多 →

最新新闻

深入解析SSI协议:寄存器映射、配置流程与嵌入式通信实战

深入解析SSI协议:寄存器映射、配置流程与嵌入式通信实战

1. SSI协议核心与寄存器映射总览 搞嵌入式开发,特别是涉及到微控制器与外设通信, 同步串行接口(SSI) 是你绕不开的一个基础且强大的通信协议。和I2C、UART这些异步协议不同,SSI的核心在于“同步”——通信双方共享一…

2026/7/23 14:34:00 阅读更多 →
模型还需要微调吗

模型还需要微调吗

一个大模型时代的好问题 2023 年,一家知名法律 AI 公司做了一件当时看起来很正确的事。 他们和前沿实验室合作,用自己的法律数据微调了一个专属模型。盲测结果:律师们 97% 的情况下更喜欢这个微调模型,而不是当时的王者 GPT-4。 完…

2026/7/23 14:34:00 阅读更多 →
PICO 4 VR开发调试神器:Live Preview Plugin串流实战指南

PICO 4 VR开发调试神器:Live Preview Plugin串流实战指南

1. 项目概述:为什么我们需要一个VR开发调试神器? 如果你正在或者曾经为PICO 4开发VR应用,那么对下面这个场景一定不会陌生:修改一行代码,点击Unity的Build按钮,等待漫长的编译和打包过程,然后通…

2026/7/23 14:34:00 阅读更多 →
xAI Grok CLI完整使用指南:代码生成与命令行AI开发工具详解

xAI Grok CLI完整使用指南:代码生成与命令行AI开发工具详解

xAI Grok CLI 重大更新前瞻:开发者必备的完整使用指南 近期,xAI 宣布将在下周发布 Grok CLI 的重大更新,这一消息在开发者社区引起了广泛关注。作为一款备受期待的命令行工具,Grok CLI 的更新将为开发者带来更强大的代码理解和生成…

2026/7/23 14:34:00 阅读更多 →
.NET Core异步链路追踪实践与OpenTelemetry集成

.NET Core异步链路追踪实践与OpenTelemetry集成

1. 项目概述:异步链路追踪的必要性 在分布式系统架构中,一个外部请求往往需要经过多个微服务处理,这就形成了复杂的调用链路。当我们在.NET Core应用中采用异步编程模型时(比如async/await),传统的日志系统…

2026/7/23 14:34:00 阅读更多 →
深入解析TI TLK10xL以太网PHY:时序、硬件配置与调试实战

深入解析TI TLK10xL以太网PHY:时序、硬件配置与调试实战

1. 项目概述与核心价值在嵌入式网络设备的设计中,以太网物理层(PHY)芯片扮演着“翻译官”和“信号调理师”的双重角色。它负责将来自MAC控制器的并行数字信号,转换成能在双绞线等物理介质上传输的差分模拟信号,反之亦然…

2026/7/23 14:32:59 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻