【Linux】gdb的简单使用

news2024/11/16 6:37:43

文章目录

  • 一、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://www.coloradmin.cn/o/1620264.html

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

相关文章

男生一般穿什么裤子好看?五大爆款男装精选测评!

男生裤子要怎么选才能找到适合自己的裤子呢&#xff1f;这肯定是大家选裤子时经常出现的一个疑问了&#xff0c;现在的市面上虽然款式风格非常多&#xff0c;但是由于品牌鱼龙混杂的原因&#xff0c;不同的裤子质量也参差不齐。为了帮助各位男同胞能选到适合自己的裤子&#xf…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

Day15-进程和线程-开启线程的三种方式Thread类的常见方法线程的安全和同步线程池

1. 进程和线程-开启线程的三种方式 1.1 进程和线程的介绍 1.2 开启线程的三种方式 1.2.1 继承Thread类 package com.itheima.thread;public class ThreadDemo1 {/*开启线程第一种方式: 继承Thread类1. 编写一个类继承Thread2. 重写run方法3. 将线程任务代码写在run方法中4. …

无人机探测技术,无人机侦测频谱仪技术实现详解

频谱仪&#xff0c;又称为频谱分析仪&#xff0c;是一种用于测量电信号频谱特性的仪器。其基本原理是通过将时域信号转换为频域信号&#xff0c;进而分析信号的频率成分、功率分布、谐波失真等参数。频谱仪利用快速傅里叶变换&#xff08;FFT&#xff09;算法&#xff0c;将采集…

复习python函数

复习python函数 1.对函数的理解函数的传递方式返回值 return可通过help()函数查看函数说明作用域 2.不定长参数3.递归4.高阶函数将函数作为参数传递将函数作为返回值返回 5.匿名函数6.装饰器 1.对函数的理解 函数可以用来保存一些可执行的代码&#xff0c;并且可以在需要时&am…

C语言—贪吃蛇(链表)超详解

目录 游戏背景 游戏展示效果 需要实现的功能 贪吃蛇地图绘制&#xff1a; 蛇吃食物的功能&#xff1a; 蛇的移动控制&#xff1a; 蛇撞墙死亡&#xff1a; 蛇撞自身死亡&#xff1a; 计算得分&#xff1a; 蛇身加速、减速&#xff1a; 暂停游戏&#xff1a; 技术要…

关注四个要点,以“韧性”助力大数据局数据安全体系化建设

近日&#xff0c;中国互联网协会数字政府发展工作委员会主办的“推进政务服务提质增效的思考与实践”主题沙龙活动在京举行&#xff0c;中央、地方政府信息化部门相关负责同志及工委会18家成员单位的业界专家和团队负责人参会。 美创科技获邀参加&#xff0c;技术专家张骥带来《…

神州设备互联接口IPV6地址用本地链路地址配置路由综合运用

一、基本配置: SW-1: SW-1>ena SW-1#conf SW-1(config)#ipv6 enable SW-1(config)#vlan 100 SW-1(config)#int l1 SW-1(config-if-loopback1)#ip add 1.1.1.1 255.255.255.255 SW-1(config-if-loopback1)#ipv6 add 2001:1::1/128 SW-1(config-if-loopback1)#e…

python绘制随机地形地图

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 当我们谈论计算机编程中的地图生成时&#xff0c;通常会想到游戏开发、仿真模拟或者数据可视…

使用预训练模型构建自己的深度学习模型(迁移学习)

在深度学习的实际应用中&#xff0c;很少会去从头训练一个网络&#xff0c;尤其是当没有大量数据的时候。即便拥有大量数据&#xff0c;从头训练一个网络也很耗时&#xff0c;因为在大数据集上所构建的网络通常模型参数量很大&#xff0c;训练成本大。所以在构建深度学习应用时…

大数据学习第四天

文章目录 yaml 三大组件的方式交互流程hive 使用安装mysql(hadoop03主机)出现错误解决方式临时密码 卸载mysql (hadoop02主机)卸载mysql(hadoop01主机执行)安装hive上传文件解压解决版本差异修改hive-env.sh修改 hive-site.xml上传驱动包初始化元数据在hdfs 创建hive 存储目录启…

毫米波雷达模块在高精度人体姿态识别的应用

人体姿态识别是计算机视觉领域中的重要问题之一&#xff0c;具有广泛的应用前景&#xff0c;如智能安防、虚拟现实、医疗辅助等。毫米波雷达技术作为一种无需直接接触目标就能实现高精度探测的感知技术&#xff0c;在人体姿态识别领域具有独特的优势。本文将探讨毫米波雷达模块…

kubeadmin搭建自建k8s集群

一、安装要求 在开始之前&#xff0c;部署Kubernetes集群的虚拟机需要满足以下几个条件&#xff1a; 操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多【注意master需要两核】可以访问外网&#xff0c;需要…

Python 全栈体系【四阶】(三十四)

第五章 深度学习 六、PaddlePaddle 图像分类 4. 思路及实现 4.1 数据集介绍 来源&#xff1a;爬虫从百度图片搜索结果爬取 内容&#xff1a;包含 1036 张水果图片&#xff0c;共 5 个类别&#xff08;苹果 288 张、香蕉 275 张、葡萄 216 张、橙子 276 张、梨 251 张&#…

NVIDIA Jetson jtop查看资源信息

sudo -H pip install -U jetson-stats 安装好之后可能需要reboot 执行jtop&#xff1a; 时间久了可能会退出&#xff0c;可参考如下再次启动。 nvidiategra-ubuntu:~$ jtop The jtop.service is not active. Please run: sudo systemctl restart jtop.service nvidiategra-ub…

【古琴】倪诗韵古琴雷修系列(形制挺多的)

雷音系列雷修&#xff1a;“修”字取意善、美好的&#xff0c;更有“使之完美”之意。精品桐木或普通杉木制&#xff0c;栗壳色&#xff0c;纯鹿角霜生漆工艺。 方形龙池凤沼。红木配件&#xff0c;龙池上方有“倪诗韵”亲笔签名&#xff0c;凤沼下方&#xff0c;雁足上方居中位…

mPEG-Biotin,Methoxy PEG Biotin在免疫亲和层析、荧光标记和生物传感器等领域发挥关键作用

【试剂详情】 英文名称 mPEG-Biotin&#xff0c;Methoxy PEG Biotin 中文名称 聚乙二醇单甲醚生物素&#xff0c;甲氧基-聚乙二醇-生物素 外观性状 由分子量决定&#xff0c;固体或者粘稠液体。 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.…

Activiti7基础

Activiti7 一、工作流介绍 1.1 概念 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使此目标…

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

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

Git笔记-配置ssh

Git在Deepin中的ssh配置 一、环境二、安装1. 查看GitHub账户2. 配置 git3. 生成 ssh key 三、配置 一、环境 系统&#xff1a; Deepin v23 Git仓库&#xff1a;GitHub 二、安装 1. 查看GitHub账户 在设置界面看到自己的邮箱&#xff0c;这个邮箱就是后面会用到的邮箱 2. …