发布时间:2026/8/18 19:14:44
GDB 使用指南 GDB 官网https://www.sourceware.org/gdb/GDB 是什么东西GDB, the GNU Project debugger, allows you to see what is going on inside’ another program while it executes – or what another program was doing at the moment it crashed.GDBGNU工程调试器允许你看到另一个程序在执行时“内部”发生了什么 - 或者另一个程序在崩溃时正在做什么。GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:Start your program, specifying anything that might affect its behavior.Make your program stop on specified conditions.Examine what has happened, when your program has stopped.Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.GDB可以做四种主要的事情以及支持这些事情的其他事情来帮助你发现错误启动程序并设置参数。打断点在特殊情况下停止。检查程序停止时发生了什么。执行到断点停止时或crash停止时可以打印当前变量更改程序中的内容以便您可以尝试更正一个错误的影响并继续了解另一个错误。GDB 支持哪些语言AdaAssemblyCCDFortranGoObjective-COpenCLModula-2PascalRust搭建实验环境安装 gdbyum install gdb 或 apt install gdb检查 gdb 是否安装成功gdb --version三种调试方式调试一个二进制文件 gdb a.out调试一个正在运行的进程 gdb -p调试一个挂掉的进程 gdb a.out core文件GDB 命令GDB 命令共有 12 大类类别介绍示例aliases其它命令的别名ni、tpbreakpoints在某个节点上让程序停止break、disabledata查看数据disassemble、printfiles指定并检查文件file、listinternals维护指令(GDB维护人员使用)flushregs、maintenanceobscure模糊的特性compile、recordrunning运行程序next、runstack检查堆栈bt、framestatus状态查询info、showsupport配套设施if、quittracepoints在不停止程序的情况下追踪程序的执行actions、collectuser-defined用户自定义命令1、运行命令run简记为 r 其作用是运行程序当遇到断点后程序会在断点处停止运行等待用户输入下一步的命令。continue简写c 继续执行到下一个断点处或运行结束 next简写 n单步跟踪程序当遇到函数调用时也不进入此函数体此命令同 step 的主要区别是step 遇到用户自定义的函数将步进到函数中去运行而 next 则直接调用函数不会进入到函数体内。 step 简写s单步调试如果有函数调用则进入函数与命令n不同n是不进入调用的函数的 until当你厌倦了在一个循环体内单步跟踪时这个命令可以运行程序直到退出循环体。 until行号 运行至某行不仅仅用来跳出循环 finish 运行程序直到当前函数完成返回并打印函数返回时的堆栈地址和返回值及参数值等信息。 call 函数(参数)调用程序中可见的函数并传递“参数”如call gdb_test(55)quit简记为 q 退出gdb2、断点breakn 简写b n:在第n行处设置断点 可以带上代码路径和代码名称 b OAGUPDATE.cpp:578 b fn1ifab条件断点设置breakfuncbreak缩写为b在函数func()的入口处设置断点如break cb_button delete 断点号n删除第n个断点 disable 断点号n暂停第n个断点enable断点号n开启第n个断点clear行号n清除第n行的断点 info b info breakpoints 显示当前程序的断点设置情况 delete breakpoints清除所有断点3、查看源码list 简记为 l 其作用就是列出程序的源代码默认每次显示10行。 list 行号将显示当前文件以“行号”为中心的前后10行代码如list12list 函数名将显示“函数名”所在函数的源代码如list main list 不带参数将接着上一次 list 命令的输出下边的内容。4、打印表达式print 表达式简记为 p 其中“表达式”可以是任何当前正在被测试程序的有效表达式比如当前正在调试C语言的程序那么“表达式”可以是任何C语言的有效表达式包括数字变量甚至是函数调用。 print a将显示整数 a 的值 print a将把 a 中的值加1,并显示出来 print name将显示字符串 name 的值 print gdb_test(22)将以整数22作为参数调用 gdb_test()函数 print gdb_test(a)将以变量 a 作为参数调用 gdb_test()函数 display 表达式在单步运行时将非常有用使用display命令设置一个表达式后它将在每次单步进行指令后紧接着输出被设置的表达式及值。如 display awatch表达式设置一个监视点一旦被监视的“表达式”的值改变gdb将强行终止正在被调试的程序。如watcha whatis 查询变量或函数 info function 查询函数 扩展info locals 显示当前堆栈页的所有变量5、查看运行信息where/bt 当前运行的堆栈列表 bt backtrace 显示当前调用堆栈 up/down 改变堆栈显示的深度setargs 参数:指定运行时的参数 show args查看设置好的参数 info program 来查看程序的是否在运行进程号被暂停的原因。6、保存历史命令编辑 ~/.gdbinitvim~/.gdbinit写入plaintextsethistorysave onsethistoryfilename ~/.gdb_historysethistorysize2000sethistoryexpansion on之后退出 gdb 会自动保存命令下次打开 gdb 上下箭头可以翻历史。7、分割窗口layout用于分割窗口可以一边查看代码一边测试 layout src显示源代码窗口 layout asm显示反汇编窗口 layout regs显示源代码/反汇编和CPU寄存器窗口 layout split显示源代码和反汇编窗口 Ctrl L刷新窗口8、其它功能shell 执行终端命令shellls打开日志功能set loggin on

相关新闻

2026/8/18 19:09:44

窗口尺寸调整工具实测:一招治服拖不动的顽固窗口

窗口尺寸调整工具实测:一招治服拖不动的顽固窗口 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 说个前几天的事:同事要在一个老旧的工单系统里核对数据&am…

2026/8/18 19:09:44

点播视频站验收:播放域、CDN 与 API 三域测速

点播视频站验收:播放域、CDN 与 API 三域测速工具地址:https://www.speedce.com 社区论坛:https://bbs.speedce.com 联系:speedceadsgmail.com写在前面 本文围绕「点播视频站验收」展开,提供可落地的技术方案&#xff…

2026/8/18 19:09:44

1.从零开始的单片机生活-LED篇

目录 1.前言2.51单片机介绍3.LED模块介绍4.点亮一个LED5.LED闪烁6.LED流水灯7.独立按键控制LED亮灭8.独立按键控制LED状态9.独立按键控制LED显示二进制10. 独立按键控制LED移位11.后记 1.前言 《关于没洗杯子在便利店门口穿越异世界学习51单片机这回事》, 分享学习…

2026/8/18 20:25:19

AtCoder Beginner Contest 181-200

AtCoder Beginner Contest 181 AtCoder Beginner Contest 181-CSDN博客 AtCoder Beginner Contest 182 AtCoder Beginner Contest 182_[abc182d] wandering-CSDN博客 AtCoder Beginner Contest 183 AtCoder Beginner Contest 183_atcoder183题解-CSDN博客 AtCoder Beginner Con…

2026/8/18 20:25:19

计算周期优化:从原理到工业与金融实践

1. 项目概述:什么是"计算周期1"? "计算周期1"这个看似简单的概念,实际上在数据处理、自动化控制、金融分析等多个领域都有广泛应用。简单来说,它指的是一个完整计算过程从开始到结束的时间跨度。这个周期可能…

2026/8/18 20:25:19

基于Hadoop+Spark的高血压风险分析系统设计与实现

1. 项目背景与核心价值 高血压风险分析系统是一个典型的医疗健康领域大数据应用。根据世界卫生组织统计,全球约有12.8亿成年人患有高血压,其中近半数人并不知晓自己患病。这种"沉默的杀手"每年导致约1000万人死亡,而早期风险预测可…

2026/8/18 20:25:19

STM32F051定时器硬件刹车功能:从原理到实战的电机安全保护指南

1. 从一次电机失控说起:为什么刹车功能不是“可有可无”的配置那天下午,实验室里弥漫着一股淡淡的焦糊味。一块STM32F051的开发板连着一个小型直流有刷电机,原本平稳运行的PWM调速程序,在某个瞬间突然失控,电机轴像脱缰…

2026/8/18 20:25:19

协同进化LLM智能体系统:攻克长视野复杂任务的架构与实战

1. 项目概述:当大语言模型学会“进化”与“协作” 最近在琢磨长周期、多步骤的复杂任务自动化时,发现一个挺有意思的瓶颈:单个大语言模型(LLM)Agent,哪怕能力再强,面对一个需要连续决策、调用多…

2026/8/17 10:49:52

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步?是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭?最近,通义千问团队发布的 Qwen3.8-27B 模型,宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz,PWM 模式恒压Buck DC-DC 转换器,8V 到36V 宽工作电压范围,低纹波,内置低导通电阻功率MOS。ME3169 内置环路补偿电路,可以减少外围元器件数量。内部设计有恒压环路,可以通过外部电阻…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…