深入解析:《Gdb 调试实战指南:不同风格于VS下的一种调试模式》

news/2025/10/19 13:02:32/文章来源:https://www.cnblogs.com/lxjshuju/p/19150743

前引:在 Linux 开发的世界里,每一位程序员都曾与 “隐藏极深的 bug” 正面交锋:明明逻辑看似无懈可击,程序却频繁崩溃;运行结果与预期南辕北辙,却找不到任何语法错误;甚至进程突然挂起,日志里只留下一行模糊的报错…… 此时,你需要的不是反复打印日志的 “笨办法”,而是一款能直抵问题核心的调试利器 ——Gdb!

目录

【一】Gdb介绍

【二】Gdb安装

【三】Gdb调试使用

(1)创建目标文件

(2)进入退出调试模式

(3)查看代码

(4)设置断点

(5)查看/删除断点

(6)启动程序

(7)控制程序运行

(8)监视变量

(9)修改变量


【一】Gdb介绍

可理解为Gdb是Linux下的代码调试工具,专为编译型语言(如 C、C++、Go、Fortran 等)设计,是 Linux/Unix 环境下程序调试!程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程 序,默认 release 模式!要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候,加上 -g 选项,如果没有添加,程序⽆法被编译,例如:

//Release版本
gcc mycmd.c -o mycmd
//DeBug版本
gcc mycmd.c -o mycmd -g

【二】Gdb安装

Centos执行下面指令即可:

sudo yum install gdb -y

【三】Gdb调试使用

(1)创建目标文件

首先我们建一个源文件,以.c为例:

然后我们编译一下得到可执行程序,记住需要加 -g 进入Debug模式!

(2)进入退出调试模式

我们输入下面指令进入调试模式:

gdb text(可执行程序)

如果我们要退出,输入 q 即可

(3)查看代码
指令作用示例
list(或l显示当前位置开始的 10 行代码(gdb) l
list 行号显示指定行号附近的代码(gdb) l 5(显示第 5 行附近)
list 函数名显示指定函数的代码(gdb) l sum(显示 sum 函数)
list 文件名:行号多文件时指定文件查看(gdb) l test.c:8

例如:

(4)设置断点

设置断点之后程序运行到断点之后就会停下来,可以查看快速查看接下来的程序状态

指令格式作用示例
b 行号在当前文件的指定行设断点(gdb) b 8(第 8 行设断点)
b 函数名在函数入口设断点(gdb) b sum(sum 函数入口)
b 文件名:行号多文件时指定文件的行号

(gdb) b test.c:15

条件断点:(注意 if 单独前后空格,具体条件不分开)

b 行数 条件
(gdb) b 8 if i==3
Breakpoint 2 at 0x11c8: file test.c, line 8.

例如:

(5)查看/删除断点

注意:删除操作的是查看断点之后的编号,而不是行数

指令作用示例
info breaki b查看所有断点(含编号、位置)(gdb) i b
delete 断点编号d 编号删除指定断点(gdb) d 2(删除编号 2 的断点)
clear 行号删除指定行的所有断点(gdb) clear 8

例如:

(6)启动程序

启动程序,到断点处或者main开始的第一行停下来

指令作用适用场景
runr从程序开头运行,直到断点 / 结束 / 崩溃需要完整运行程序到断点时
start从程序开头运行,在 main 函数第一行暂停想从程序入口开始逐步调试时

例如:

(7)控制程序运行

可以逐语句、过程的控制程序运行

nextn执行 “当前行”,遇到函数不进入跳过函数调用,适合看整体流程
steps执行 “当前行”,遇到函数会进入进入函数内部,适合查函数内的 bug
continuec继续运行,直到下一个断点 / 结束 / 崩溃跳过当前暂停,直接到下一个关键位置

例如:

(8)监视变量

这里我们就学一种常见的逐个监视变量内容,其它的可以百度

print 变量
或者
p 变量

(9)修改变量

可以在调试模式下修改变量的值,这个是在VS下无法实现的!

set var 变量修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10 个常见的Python 错误及如何避免它们

Python 是一种非常灵活且强大的编程语言,但即使是经验丰富的开发者也可能会犯一些常见的错误。了解这些错误及其解决方法可以帮助你更高效地编写代码,减少调试时间。今天,就让我们一起看看 10 个常见的 Python 错误…

2025年手持光谱仪/光谱分析仪/便携式光谱仪厂家推荐榜单:矿石/元素/合金/贵金属分析利器,赛普斯/IF光谱仪精选!

2025年手持光谱仪/光谱分析仪/便携式光谱仪厂家推荐榜单:矿石/元素/合金/贵金属分析利器,赛普斯/IF光谱仪精选!随着科技的不断进步和工业需求的日益增长,手持光谱仪/光谱分析仪/便携式光谱仪在矿石、元素、合金、贵…

平铺窗口合成器杂谈

玩linux 有4-5年了,今天来简单梳理一下linux上我用过的一些平铺窗口合成器,也顺便说一下最近先换的一个合成器--niri 和平铺窗口绑定最多的标签就是 -- “效率提升”,“增加屏幕利用率”,我最初可能就是应为这些标…

微信公众号文章插入附件详细教程-适合于招聘,报名表,公告公示等

在公众号推文插入文档附件链接,是一个很实用的技巧,如果各位童鞋还没有掌握,可以跟着下面步骤学习一下,非常简单。 可用于推文插入添加招聘信息、申请表、登记表、报名表、大赛通知、公示名单、抽签结果、招标公告…

题解:P10514 考试

Solution 对于第 \(i\) 道题,\(k\) 个随机选中的同学全部答对的概率为: \[P_i = \frac{\binom{n - a_i}{k}}{\binom{n}{k}} \]由于题目相互独立,总概率为: \[P = \prod_{i=1}^{m} P_i = \prod_{i=1}^{m} \frac{\bi…

华为昇腾笔记之Mindspeed-LLM 中 MoE 实现机制与重写逻辑总览

🧩 Mindspeed-LLM 的 MoE 实现机制与重写逻辑总览 Mindspeed-LLM 基于 Megatron-Core 的 MoE 框架,在运行前通过一系列 Monkey Patch / Wrapper 注册, 将 Megatron 的核心 MoE 模块(Experts 层、Router 路由层、通…

题解:P12037 [USTCPC 2025] 数学分析

Solution 1. 记号 记 \[I_i = \int^1_0\frac{x^i}{x^2 + 1}\,dx \]则易得 \[\begin{align*} I_0 &= \frac{\pi}{4} \\ I_1 &= \frac{\ln 2}{2} \end{align*} \]\(I_i\) 这个式子不好直接积分,我们想办法化成我…

实时时序上下文推荐系统获KDD最佳论文奖

某中心研究人员在KDD会议上荣获最佳论文奖,论文提出了一种实时时序上下文推荐技术,能自适应追踪用户偏好变化,有效解决冷启动问题,并支持百万级商品目录的高效推荐。实时时序上下文推荐系统获KDD最佳论文奖 在ACM知…

题解:CF1010A Fly

Solution 实数二分板题。 以下字母含义与题面中相同。 注意到答案具有单调性,所以可以二分,即对现在火箭燃料的重量 \(t\) 二分。那 check() 函数怎么写呢? 设 \(sum\) 表示现在火箭的载重,\(t\) 表示现在火箭燃料…

2025年精密磨床/CNC机械加工厂家推荐排行榜,覆盖铣床/车床/磨削/多轴/复合加工,专业非标定制服务首选!

2025年精密磨床/CNC机械加工厂家推荐排行榜,覆盖铣床/车床/磨削/多轴/复合加工,专业非标定制服务首选!随着制造业的快速发展和技术进步,精密磨床和CNC机械加工已成为现代工业不可或缺的重要组成部分。这些设备不仅…

题解:CF1914F Programming Competition

Description 给定一棵树,求不互为祖先的点对的最大个数。 Solution 考虑树形 DP。 设 \(dp_u\) 表示根节点为 \(u\) 的子树的答案。 分类讨论: 设根节点 \(u\) 的重儿子为 \(v\)。当 \(size_v \le \lfloor \frac{siz…

独立开发者找蓝海:新词引流实战

SEO 新词能赚钱(收入/下载) + 很痛(评论密集) + 新(窗口期) = 进入!### 方法论底座:别再“我想做 → 找人 → 没人要”应该是 **Audience → Problem → Product**- 先定人:谁在求助、在哪发声? - 再拆问题:…

使用云服务器搭建飞牛Frp 内网穿透服务

本文将详细指导您如何使用阿里云轻量应用服务器上的宝塔面板搭建 Frp 服务端 (frps),并通过 Feiniu OS 客户端搭建 Frp 客户端 (frpc),实现内网穿透。 一、准备一台有公网 IP 的服务器 (FRPS 服务端搭建) 为了确保穿…

吐槽下小米汽车

吐槽下小米汽车吐槽下小米汽车1、车的马力太大高达220-1100kW,家用车性能错配,时速70码以上时极易打滑甩尾漂移,ESP车身稳定系统提供不了足够的稳定控制,容易出事故,网上有很多这样子的视频。公安部+银保监综合口…

PlayerPrefs持久化保存

PlayerPrefs持久化保存官方文档:PlayerPrefs - Unity 脚本 API 视频教程:Basic Saving and Loading in Unity with PlayerPrefs 1.简介 PlayerPrefs是一个用于存储玩家偏好设定(Player preference)的类,它可以存储…

使用VS2022和Unity时可能出现的问题总结

目前遇到的问题1、2都是在更新VS2022后出现的,也就意味着,每次重新安装/更新VS2022可能都需要重新设置一下。 1.VS2022自动清除Unity命名空间 使用VS2022进行Unity开发时,新建代码保存代码时,它会自动清除命名空间…

2026 中考游记

蒟蒻 A* 是 2026 届初中毕业生喵,马上就要中考了喵。逆风翻盘? 咕在前面 前传:2025 生地中考 游记。 省流:地理 100,生物 96。 按日期来写吧,到最后 100 天再用倒计时格式。 由于是在初三第一学期第一次月考之后…

MinIO 介绍(3)--MinIO 客户端 mc 管理员功能

本文主要介绍 MinIO 客户端 mc 的管理员功能;文中所使用到的软件版本:mc RELEASE.2025-07-21T05-28-08Z、Centos 8.5.2111。 1、概述 MinIO 客户端 mc 命令行工具提供了在 MinIO 中执行管理任务的命令。虽然 mc 支持…

8.16

所以无论真相、爱、世界、痛苦,还是人生,根本都无所谓啊 ————《所以我放弃了音乐》

2025-10-19

2025-10-19nemu的srai似乎有问题,平台选择riscv-nemu时,程序执行到下面代码处 0x80000094: slli a0,a0,0x18 0x80000098: srai a0,a0,0x18执行前$a0的值为0x61,按理说执行完毕后$a0的值应该是0x00000061,但是通过调…