【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.mzph.cn/bicheng/2670.shtml

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

相关文章

Supervisor答疑

引言 supervisor可以管理多个进程&#xff0c;安装也比较简单&#xff0c;可以使用apt或者是pip。 推荐使用apt安装。 问题 pip卸载问题 一开始的时候&#xff0c;这个机器并不是我安装的&#xff0c;但是能从pip列表中发现已安装&#xff0c; 但用pip卸载的时候&#xff0…

复习python函数

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

macOS - OpenXSpell

文章目录 OpenXSpell、Xspell、OpenSpell使用 Xspell 本文翻译自&#xff1a;http://openxspell.sourceforge.net/ openxspell 源码&#xff1a;https://sourceforge.net/projects/openxspell/ OpenXSpell、Xspell、OpenSpell OpenXSpell 是 Mac 上的开源拼写检查工具。 从 OS…

如何给word中的拼音加声调?分享3个方法

一&#xff0c;前言 在Word文档中标注拼音声调&#xff0c;是许多人在处理中文文档时经常需要面对的问题。对于不熟悉拼音的人来说&#xff0c;这可能会是一个挑战。但是&#xff0c;通过掌握一些简单的步骤和技巧&#xff0c;我们可以轻松地在Word文档中标注拼音声调。 二&a…

wsl2 中docker安装完毕后无法正常启动

wsl2 中docker安装完毕后无法正常启动 1、背景2、目标3、环境4、原因4、操作5.1、查看配置5.2、 切换配置5.3、启动docker5.4、验证docker 1、背景 在win10中安装wsl2体验linux操作系统&#xff0c;按照docker官网步骤安装&#xff0c;安装完毕后面提示 $ docker ps Cannot co…

开源模型应用落地-LangChain高阶-集成vllm-QWen1.5(一)

一、前言 通过langchain框架调用本地模型,使得用户可以直接提出问题或发送指令,而无需担心具体的步骤或流程。vLLM是一个快速且易于使用的LLM推理和服务库。通过两者的结合,可以更好地处理对话,提供更智能、更准确的响应,从而提高对话系统的性能和用户体验。 二、术语 2.…

笨蛋学C++【C++基础第六弹】

C基础第六弹 C面向对象1.C类 & 对象1.1C类定义1.2C对象1.3访问数据成员1.4类成员函数1.5类访问修饰符公有public成员私有private成员受保护protected成员继承中的特点 1.6构造函数 & 析构函数类的构造函数带参数的构造函数使用初始化列表来初始化字段类的析构函数 1.7拷…

【软件工程中的螺旋模型】

文章目录 一、什么是螺旋模型&#xff1f;二、螺旋模型的工作流程1. 计划阶段2. 需求分析阶段3. 设计阶段4. 实施阶段5. 验证与确认阶段6. 进化阶段 三、螺旋模型的优点四、螺旋模型的缺点 一、什么是螺旋模型&#xff1f; 螺旋模型是一种风险驱动的软件开发过程模型&#xff…

云计算中的过度授权:安全隐患与应对策略

云计算凭借其弹性、可扩展等优势&#xff0c;已经成为诸多企业组织拓展业务的重要基础设施之一。然而&#xff0c;与传统IT架构相比&#xff0c;云计算环境的安全管理也面临着新的挑战。过度授权 (Overprivileging) 便是云安全领域亟待解决的主要问题之一&#xff0c;本文将带领…

为什么我的 Mac 运行缓慢以及如何使用CleanMyMac X修复它

近些年伴随着苹果生态的蓬勃发展&#xff0c;越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现&#xff0c;它的使用逻辑与Windows存在很多不同&#xff0c;而且随着使用时间的增加&#xff0c;一些奇奇怪怪的文件也会占据有限的磁盘空间&#xff0c;进而影响使用…

Linux笔记之more命令分页显示内容

Linux笔记之more命令分页显示内容 code review! —— 2024-04-20 在 Unix 和类 Unix 操作系统中&#xff08;如 Linux、macOS&#xff09;&#xff0c;more 命令是一个用于分页显示文本文件内容的工具。其基本功能是将长文本分割成逐页显示&#xff0c;用户可以逐页浏览而…

iOS 将字符串分割成单个字符| 字符串转成数组

iOS开发中我们常常需要对字符串进行出去,例如分割,通常都是有个参照物进行分割 例如: https://www.xxx.xxx?namezhangshan iOS需要取出zhangsan的值,就需要用参照物“name”进行分割,右边为张三,左边为其他字符串 OC自带的分割api是 componentsSeparatedByString:"&qu…

jasypt组件死锁bug案例分享

事故描述 1、上午9.55发布了一个Apollo动态配置参数&#xff1b; 2、片刻后&#xff0c;服务器接口开始出现大量的超时告警&#xff0c;似乎是某资源被耗尽不足分配&#xff1b; 3、正值业务请求高峰的上午十点&#xff08;平台上午10点会有一些活动会拉一波用户流量&#x…

Vue3中使用i18n,this.$t报错

方案一 //需要把$t手动挂载到全局 //main.js app.config.globalProperties.$t i18n.global.t //需要使用的时候在组件里引用 import { getCurrentInstance } from vue const _this getCurrentInstance().appContext.config.globalProperties console.log($i18n,_this.$…

HTML表单(详解网页表单如何实现)

目录 一、表单介绍 1.概念 二、表单用法 1.HTML表单 2.HTML 表单 - 输入元素 2.1.文本域&#xff08;Text Fields&#xff09; 2.2.密码字段 2.3.单选按钮&#xff08;Radio Buttons&#xff09; 2.4.复选框&#xff08;Checkboxes&#xff09; 2.5.提交按钮(Submit)…

人人都是开发者的时代,学编程还有用吗?

欢迎大家在 GitHub 上 Star 我们&#xff1a; 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

qt_standard_project_setup

qt_standard_project_setup的更先进的国际化。 这个camke命令的官方说明是&#xff1a;项目范围默认标准设置。 该命令在Qt6包的Core组件中定义&#xff0c;可以像这样加载: find_package(Qt6 REQUIRED COMPONENTS Core)这个命令是在Qt 6.3中引入的 qt_standard_project_set…

检查*.bib参考文献是否重复

安装bibtexparser pip install bibtexparser 代码 import bibtexparser from difflib import SequenceMatcherdef parse_bib_file(filename):with open(filename, r, encodingutf-8) as bibfile:bib_database bibtexparser.load(bibfile)return bib_database.entriesdef fi…

【电控笔记5.10】Luenberger估测器

Luenberger估测计 单积分器:pi控制器的补偿 双积分器:使用pid控制器的补偿 除了受控厂跟传感器,其他都在mcu 去掉Rs就是一个PLL锁相环 带宽比PLL更大

齐护K210系列教程(九)_## 播放音频文件wav

播放音频文件wav 播放音频只支持带喇叭的型号&#xff1a;AIstart_掌机、AIstart_Mini AIstart可以播放SD卡中的wav音频文件&#xff0c;在编写程序前请将文件准备好存放到SD卡内。 注&#xff1a;播放wav格式音频&#xff1a;wav格式的音频频率不能超过16KHZ。 1&#xff0…