【Linux】gdb的简单使用

文章目录

  • 一、gdb是什么?
  • 二、使用说明
    • 1. 安装
    • 2. 注意事项
    • 3. 常用调试指令
      • 3.1 gdb
      • 3.2 l
      • 3.3 r
      • 3.4 n
      • 3.5 s
      • 3.6 b
      • 3.7 info b
      • 3.8 finish
      • 3.9 p
      • 3.10 set var
      • 3.11 c
      • 3.12 d breakpoints
      • 3.13 d n
      • 3.14 disable/enable breakpoints
      • 3.15 disable/enable n
      • 3.16 info b
      • 3.17 display 变量名/undisplay 编号
      • 3.18 until n
      • 3.19 bt
      • 3.20 ctrl + d/quit


一、gdb是什么?

gdb 是在 Linux 系统中的一款调试工具.

二、使用说明

1. 安装

首先先检测是否安装有 gdb:

gdb -v

没有安装应该会提示: command not found. 此时输入指令进行安装:

yum -y install gdb

而已经装有了, 则会显示类似信息:
在这里插入图片描述

2. 注意事项

在 Linux 下编译 C/C++ 代码时, 默认是 Release 版本的, 而 Release 版本是不携带调试信息的, 所以直接调试会失败:
在这里插入图片描述
因此在编译时要加上 -g 选项:

g++ -o gdbTest gdbTest.cpp -g

此时就可以正常调试了:
在这里插入图片描述

3. 常用调试指令

用于当作例子使用 gdb 调试的代码, 其功能就是根据给定的 n, 从 1 累加到 n:

#include <iostream>
using namespace std;int func(int n) 
{cout << "enter func" << endl;int sum = 0;for (int i = 1; i <= n; ++i){sum += i;}cout << "quit func" << endl;return sum;
}int main()
{int n = 100;int res = func(n);cout << "res: " << res << endl;return 0;
}

3.1 gdb

gdb + 可执行文件名: 进入调试界面
在这里插入图片描述

3.2 l

l + 行号: 以那一行为开头显示 10 行的代码, 往后可以直接按回车, 则接着上次的位置往后显示代码, 一次显示10 行.
在这里插入图片描述
l + 函数名: 以函数名所在的那一行为中心显示 10 行的代码, 往后可以直接按回车, 则接着上次的位置往后显示代码, 一次显示10 行.
在这里插入图片描述

3.3 r

在调试的状态下, 直接运行完整个程序, 类似于 vs 中的 ctrl + F5, 打了断点之后, 按 r 会直接运行到断点位置.
在这里插入图片描述

3.4 n

单条执行, 相当于 vs 中的 F10, 遇到函数不会进入其内部, 需要配合打断点使用, 先通过 r 运行到断电处, 此时再输入 n 即可实现单步调试.
在这里插入图片描述

3.5 s

相当于 vs 中的 F10, 遇到函数会进入其内部, 需要配合打断点使用, 先通过 r 运行到断电处, 此时再输入 s 即可实现调试.
在这里插入图片描述

3.6 b

b + 行号: 给该行打上断点.
在这里插入图片描述

b + 函数名: 给某个函数名的第一行执行语句打上断点.
在这里插入图片描述
虽然函数名在第 4 行, 但是该函数会执行的第一句语句在第 6 行, 所以断点打在了第 6 行.
在这里插入图片描述

3.7 info b

查看本次调试中打过的所有断点.
在这里插入图片描述

3.8 finish

进入函数后, 执行完整个函数, 并返回.
在这里插入图片描述

3.9 p

打印变量的值.
在这里插入图片描述
在这里插入图片描述
但它不是一直显示的, 在执行其他语句时会把它冲掉.

3.10 set var

设置变量的值, 可用于在循环中跳转到某一值.
在这里插入图片描述

3.11 c

从当前语句开始连续执行到离其最近的断点处, 可在循环外打上断点, 让其直接执行完循环, 直接获得循环结果.
在这里插入图片描述

3.12 d breakpoints

删除所有断点, 直接输入 d 也会达到同样的效果
在这里插入图片描述

在删除时会提示 Delete all breakpoints? (y or n), 选择 yes(y) 即可.

3.13 d n

删除断点 n, n 为断点的 Num, 每次调试的断点 Num 都是连续的, 在演示 delete breakpoints 时, 打了两个断点在 18, 19 行, 而它们的 Num 按顺序就是 1, 2, 当将它们都删除后, 再次打断点时, 断点的 Num 不会因为目前没有任何断点而重新从 1 开始编号, 而是会接着往下编号, 当退出此次调试, 重新开始另一次调试时, Num 会刷新, 从 1 开始编号.
在这里插入图片描述

3.14 disable/enable breakpoints

停用/启用所有断点.
在这里插入图片描述
Enb 表示断点的使能状态, y(yes) 表示启用, n(no) 表示停用, 默认都是 y, 关于断点的停用就相当于它不起作用, 即当它不存在, 通过其他指令也跳不到它.

停用所有断点:
在这里插入图片描述
启用所有断点:
在这里插入图片描述

3.15 disable/enable n

停用/启用断点 n.
在这里插入图片描述

3.16 info b

查看目前所打的所有断点的信息.
在这里插入图片描述

3.17 display 变量名/undisplay 编号

display 变量名: 常显示变量的值, 弥补了 p 变量名只显示一次的缺陷, 每次执行新的语句, 都会显示跟踪显示变量的值.
在这里插入图片描述

undisplay 编号: 取消变量的跟踪常显示, 需要注意的是, 和 display 不同, 取消变量的跟踪不是输入其变量名, 而是输入其 display 后获得的编号.
在这里插入图片描述

3.18 until n

执行完当前行和 n 行之间的内容, 跳到 n 行.
在这里插入图片描述

3.19 bt

查看函数调用栈.
在这里插入图片描述

3.20 ctrl + d/quit

退出调试.
在这里插入图片描述
输入 y 退出.

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Windows服务做性能测试(CPU、磁盘、内存)

目录 前言1. 基本知识2. 参数说明 前言 由于需要做一些接口测试&#xff0c;测试是否有真的优化 1. 基本知识 该基本知识主要用来用到Performance Monitor&#xff0c;以下着重介绍下这方面的知识 性能监视器&#xff08;Performance Monitor&#xff09;&#xff1a;Windo…

梯度下降法总是在同一点收敛吗?

梯度下降法总是在同一点收敛吗&#xff1f; 梯度下降法并不总是在同一点收敛。梯度下降法的收敛取决于多个因素&#xff0c;包括初始参数的选择、学习率的设置、损失函数的形状等。 以下是一些影响梯度下降法收敛行为的关键因素&#xff1a; 1.初始参数&#xff1a; 初始参数…

【数据库】三、数据库SQL语言命令(基础从入门到入土)

【全文两万多字&#xff0c;涵盖大部分常见情况&#xff0c;建议点赞收藏】 目录 文章目录 目录安装SQL语言1.使用2.DATABASE查看所有库新建数据库修改数据库删除数据库连接数据库 3.TABLE创建表查看库所有表删除表查看表信息重命名表修改表字段&#xff08;列&#xff09;表中…

【八股】Java基础、集合、JVM

面向对象三大特性 1 封装&#xff1a; 将 方法 和 属性 写到同一个类中&#xff0c;并将属性 私有化&#xff0c;生成 get set方法&#xff0c;外部访问属性需要通过get和set方法,内部可以直接访问属性&#xff0c;这样的一个类我们认为它完成了封装。 2 继承&#xff1a; 子…

月入8k,21岁计算机专业男孩转行网优,天赋可以让人发光,努力也能!

今天的主人公是一位仅21岁的年轻小帅哥&#xff0c;大学学的是计算机专业&#xff0c;毕业后的工作是卖苦力&#xff0c;工作一段时间后毅然决然的选择了转行后台网优&#xff0c;让我们一起来看看这位21岁男孩转行背后的故事... 卖苦力&#xff0c;是没有前途的 今天的主人公…

【c++】list类接口函数介绍与深度剖析模拟实现

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到list有关部分&#xff0c;这一部分函数与前面的类似&#xff0c;我们简单讲解&#xff0c;重难点在模拟实现时的迭代器有关实现 目录 1.List介绍2.接…

富集分析不求人,零代码可视化GO/KEGG分析结果

01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://www.igenebook.com&#xff1b;点击菜单栏最右侧“云平台”按钮。 弹出云平台界面&#xff08;下图&#xff09;&#xff0c;输入账号、密码和验证码方可登录&#xff1b;进入云平台&#xf…

《Beginning C++20 From Novice to Professional》第二章Fundamental Types

本章将介绍C的基础数据类型&#xff0c;主要涉及下列方面&#xff1a; 变量的声明、初始化、赋值整数字面量浮点数如何计算变量类型转换字符相关auto关键字 Variables, Data, and Data Types 这里先给出变量的定义&#xff1a;有名字的一块内存&#xff0c;这个变量的类型决…

2024-04-23 linux 查看内存占用情况的命令free -h和cat /proc/meminfo

一、要查看 Linux 系统中的内存占用大小&#xff0c;可以使用 free 命令或者 top 命令。下面是这两个命令的简要说明&#xff1a; 使用 free 命令&#xff1a; free -h这将显示系统当前的内存使用情况&#xff0c;包括总内存、已用内存、空闲内存以及缓冲区和缓存的使用情况。…

想冲宇宙厂,直接挂了。。。

宇宙厂实际是字节&#xff0c;这个称呼是因为字节跳动主宰了宇宙内一切App&#xff0c;有点家大业大的意思。 今天分享一位字节春招凉经&#xff0c;问了一些数据库和Java八股&#xff0c;没出算法题&#xff0c;直接挂了&#xff0c;竟然最喜欢出算法题的字节&#xff0c;这次…

c++ - 空间申请和释放 new/delete

文章目录 一、c/c内存分布二、new/delete 的使用三、malloc/free 和 new/delete 的对比四、new/delete 的实现原理五、匹配问题 一、c/c内存分布 求下面各个变量的位置 // c/c内存分布int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar …

前端零代码开发实践:页面嵌套+逻辑连线0开发扩展组件,实现切换开关控制扇叶转动。能无代码封装扩展组件,有别于常规的web组态或低代码平台

前言&#xff1a; 官网:http://www.uiotos.net/ 什么是 UIOTOS&#xff1f; 这是一款拥有独创专利技术的前端零代码工具&#xff0c;专注于解决前端界面开发定制难题&#xff0c;原型即应用&#xff01;具有页面嵌套、属性继承、节点连线等全新特性&#xff0c;学习门槛低…

敷尔佳2023年报前瞻:“医美面膜第一股”的护城河及2024展望

查理芒格曾说&#xff1a;“要去鱼多的地方打渔”。历数长线牛股辈出的领域&#xff0c;消费行业无疑是大赢家。此中&#xff0c;美业又是消费行业最好的细分赛道之一。 4月26日&#xff0c;A股“医美面膜第一股”–敷尔佳(SZ:301371)将发布2023年财报&#xff0c;按惯例对本季…

ros2_control【B站WMGIII教学学习记录】1

资源 https://www.bilibili.com/video/BV1ku411G7UR? 学习过程中存在bug&#xff0c;记录一下 1 Q:"package ‘joint_state_publisher_gui’ not found, searching: [/home A: sudo apt install ros-humble-joint-state-publisher2 https://fishros.org.cn/forum/to…

蓄能勃发,酷开科技携酷开系统“软硬结合”提升大屏实力

智慧大屏以全新媒体形态之姿在过去几年快速增长&#xff0c;截至去年上半年&#xff0c;国内联网电视总量覆盖达5.26亿&#xff0c;其中智能电视终端活跃量达3.22亿&#xff0c;在PC、Mobile流量增长已显疲态的背景下&#xff0c;大屏的高速发展意味着一个新的赛道的崛起&#…

保护你的网站:了解5种常见网络攻击类型及其防御方法

随着互联网的迅猛发展&#xff0c;针对网站的各种类型的网络攻击随之增加&#xff0c;网络攻击事件层出不穷&#xff0c;由此&#xff0c;如何保护网站安全成为每个网站所有者的重要议题。在下面的内容中&#xff0c;我们将探讨5种常见网络攻击类型及其防御方法&#xff0c;以帮…

Linux中手工创建一个用户

当我们需要新创建一个用户时&#xff0c;有两种方法 1&#xff0c;使用useradd命令&#xff1a; [rootlocalhost /]# useradd tmg 然后给它设置一个密码 [rootlocalhost etc]# passwd tmg Changing password for user tmg. New password: BAD PASSWORD: The password is a…

C++ | Leetcode C++题解之第46题全排列

题目&#xff1a; 题解&#xff1a; class Solution { public:void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len){// 所有数都填完了if (first len) {res.emplace_back(output);return;}for (int i first; i &…

【大语言模型LLM】-基础语言模型和指令微调的语言模型

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…