【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://www.mfbz.cn/a/573314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UE C++】打印输出的两种方式

目录 一、UE_LOG 二、调试屏幕信息 一、UE_LOG 定义&#xff1a; UE_LOG 是一个将格式化消息记录到日志文件中的宏。 用法&#xff1a; UE_LOG(LogTemp, Warning, TEXT("Hello World")); 第一个输入参数 LogTemp 是提供给 DEFINE_LOG_CATEGORY 宏的类别名称。你…

饲料颗粒生产利器:全套饲料颗粒机设备揭秘

想要了解饲料颗粒机的全套设备吗&#xff1f;这里为您详细解析&#xff0c;让您对饲料颗粒机的全套配置一目了然&#xff01;饲料颗粒机全套设备&#xff0c;可谓是饲料生产的得力助手。从原料处理到颗粒成型&#xff0c;再到后续的包装存储&#xff0c;这套设备都能轻松应对。…

常见的网站

1.小林coding图解计算机网络、操作系统、计算机组成、数据库&#xff0c;让天下没有难懂的八股文&#xff01;https://xiaolincoding.com/ 2. 弟弟快看 弟弟快看-教程&#xff0c;程序员编程资料站 | DDKK.COM弟弟快看-教程&#xff0c;内容覆盖、Java核心、J2EE框架、ORM框架…

CSS详解(二)

接上篇CSS详解&#xff08;一&#xff09;-CSDN博客 1、网页布局本质 网页布局的本质是通过 CSS 将各种 HTML 元素&#xff08;即“盒子”&#xff09;摆放到页面中合适的位置。这包括设置元素的尺寸、位置、边距、填充、对齐方式、浮动等。这些盒子通过 CSS 的各种布局机制进…

【书生浦语第二期实战营学习笔记作业(四)】

课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 书生浦语第二期实战营学习笔记&作业(四) 1.1、微调理论讲解及 XTuner 介绍 两种Fin…

WMTS服务介绍

WMTS规定使用瓦片矩阵集&#xff08;Tile Matrix Set&#xff09;来表示切割后的地图&#xff0c;如图1所示&#xff0c;不同瓦片矩阵具有不同的比例尺&#xff08;分辨率&#xff09;&#xff0c;每个瓦片矩阵由瓦片矩阵标识符&#xff08;一般为瓦片矩阵的序号&#xff0c;分…

echarts树图-树效果展示

echarts树图实现数据以树的结构展示&#xff0c;其效果如下&#xff1a; 代码如下&#xff1a; const data {name: XXX公司,itemStyle: {color: #00ADD0},children: [{name: 网络主机,itemStyle: {color: #FFA12F},children: [{name: 普通路由器,itemStyle: {color: #604BF…

高可靠性部署系列(2)--- IPS双机热备

高可靠性部署系列(2)--- IPS双机热备 前言网络拓扑设备选型网络规划组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的实验或者案…

Kimi 大模型支持 Tool Calling 功能,并入驻字节「扣子Coze」开发平台!

Kimi 大模型API 支持 Tool Calling 功能 Kimi 大模型学会「使用工具」了,API 已支持 Tool Calling 功能。开发者们在打造自己的 AI Agents 时,可以让 Kimi 大模型与丰富的自定义外部工具进行交互,打开 AI 应用更大的想象空间。例如,在对话中,当用户问到一家公司的地址时,…

SAP BPC UJKT使用详解

SAP BPC(SAP Business Planning and Consolidation)旨在帮助企业进行财务规划、预算编制、预测分析和财务报告。 一、UJKT是什么&#xff1f; UJKT是什么呢&#xff1f;它是SAP 中的一个TCODE&#xff0c;该事务码的描述为脚本逻辑检测器&#xff0c;对应的源代码程序为&#…

nuxt3 无法创建项目问题

Error: Failed to download template from registry: Failed to download https://raw.githubusercontent.com/nuxt/starter/templates/templates/v3.json: TypeError: fetch failed 错误信息 解决方案 进入windows系统修改hosts文件 C:\Windows\System32\drivers\etc增加以…

IDEA中Vue开发环境搭建

1. IDEA安装Vue.js 文件>设置>插件>搜索Vue.js并安装。 2. 安装Node.js 官网地址&#xff1a;https://nodejs.org 安装包下载地址&#xff1a;https://nodejs.org/en/download 下载并安装&#xff0c;安装时&#xff0c;勾选添加系统变量选项。 # 如果正确安装…

如何批量跟踪京东物流信息

随着电商行业的快速发展&#xff0c;快递业务日益繁忙&#xff0c;无论是商家还是消费者&#xff0c;都需要一种高效、便捷的快递查询工具。快递批量查询高手软件应运而生&#xff0c;以其强大的功能和便捷的操作体验&#xff0c;赢得了广大电商、微商精英们的青睐。 快递批量…

通用计算平台与医用计算平台的差异

1.通用计算平台参考信息 《医疗器械软件注册审查指导原则&#xff08;2022年修订版&#xff09;&#xff08;2022年第9号&#xff09;》中关于“通用计算平台”有说参考《IMDRF/SaMD WG/N10 FINAL: 2013》 2.IMDRF/SaMD WG/N10 FINAL: 2013中关于通用计算平台的说明 3.通用计…

YOLOv8常见水果识别检测系统(yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff08;常见水果识别&#xff08;yolov8模型&#xff0c;从图像、视频和摄像头三种路径识别检测&#xff09;_哔哩哔哩_bilibili&#xff09; 资源包含可视化的水果识别检测系统&#xff0c;可识别图片和视频当中出现的六类常见的水果&#xff0c;包括&#xf…

git lab 2.7版本修改密码命令

1.gitlab-rails console -e production Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 14.9.0-jh (51fb4a823f6) EE GitLab Shell: 13.24.0 PostgreSQL: 12.7 2根据用户名修改密码 user User.find_by(username: ‘username’) # 替换’use…

2024年航空航天与工业技术国际学术会议(IACAIT 2024)

2024年航空航天与工业技术国际学术会议(IACAIT 2024) 2024 International Conference on Aerospace and Industrial Technology 一、【会议简介】 2024年航空航天与工业技术国际学术会议&#xff0c;将汇集全球顶尖专家&#xff0c;探讨前沿技术。 这次会议主题为“航空航天与…

PMP®考试的形式、题型、考试内容和趋势

PMP考试形式&#xff1a; 国内的PMP考试是由中国国际人才交流基金会和PMI共同组织举办&#xff0c;统一采取的都是线下笔试。一年考4次&#xff0c;今年的考试安排在3月、6月、8月、11月。3月10日的PMP考试已结束&#xff0c;接下来是6月份的考试&#xff0c;考试时间预计在6月…

2024年了,还有必要搭建企业网站吗?

现在企业的营销手段五花八门。当下火爆的短视频直播平台展现出的裂变效应也取得不错的成绩&#xff0c;这不禁让很多企业舍弃做网站的念头&#xff0c;投入自媒体账号。那么&#xff0c;2024年了&#xff0c;还有必要搭建企业网站吗&#xff1f; 我们分两种企业来看&#xff1…

利用弹性云主机部署高效数据库系统

在当今云计算的时代&#xff0c;弹性云主机&#xff08;EC2&#xff09;为我们提供了前所未有的灵活性和可扩展性&#xff0c;使得在云端部署高效的数据库系统成为可能。本文将从选择适当的云服务配置、优化数据库设置、建立完备的数据备份与恢复策略&#xff0c;以及加强数据库…
最新文章