[Ubuntu] gdb安装、编译及使用

安装gdb

  • centos

sudo yum update
sudo yum install gdb
  • ubuntu

sudo apt update
sudo apt install gdb

编译准备

正常编译,不带有gdb调试信息

g++ test.cpp -o test

加入gdb调试信息

g++ -g test.cpp -o test

使用gdb

1. 启动gdb

gdb 可执行程序

gdb test

2. 命令行调试

1. 启动&退出

命令解释
run缩写 r ,如果程序中设置断点,会停在第一个断点处,如没有断点,程序执行完
start启动程序 , 阻塞在 main 函数第一行 ,等待输入的后续其他gdb命令
continue缩写 c ,在使用start命令后,或在断点处继续运行 , 可以使用 continue 命令/或直接回车
quit缩写 q , 退出gdb调试,终止gdb线程

在gdb中启动需要调试的应用程序有两种方式 :run 命令 、 start 命令

二者选其一

2. 断点操作

在程序的某一行设置断点,程序运行到此会阻塞。

设置断点

设置断点的命令break,缩写 b

  • 设置普通断点

命令解释
b rowNum在程序的第几行设置断点
b rowNum1 rowNum2在程序的第num1...num2行设置断点
b functionName在当前函数设置断点
  • 设置条件断点

# 必须要满足某个条件, 程序才会停在这个断点的位置上
# 通常情况下, 在循环中条件断点用的比较多
(gdb) b 行数 if 变量名==某个值
查看断点

断点设置完成之后,可通过 info break 命令查看设置的断点信息 ,可以缩写为 i b

断点信息中重点属性

  • Num: 断点的编号,删除断点或者设置断点状态的时候都需要使用(重要)

  • Enb: 当前断点的状态,y 表示断点可用,n 表示断点不可用

  • What: 描述断点被设置在了哪个文件的哪一行或者哪个函数上

删除断点

通过 delete 断点编号 ,其中 delete 可以简写为 del / d

命令解释
d 断点编号1 断点编号2 ....删除(一个或多个)指定断点
d num1 - num5删除一个连续的断点区间
设置断点状态

相比删除断点,设置断点状态更加灵活。

设置断点状态之前,可以通过i b来进行查看断点状态。

  • disable 断点编号:缩写dis,将断点状态设置为不可用状态。

  • enable 断点编号:缩写ena,将断点状态设置为可用状态。

这两个命令也跟上面delete命令用法一样,可以设置(一个或多个)指定断点 或者 设置一个连续的断点区间

3. 查看代码

4. 打印变量信息

print

程序阻塞后,可以通过 print 命令缩写 p 打印变量的名字或变量类型 ,并且跟踪打印某变量的值。

p 变量名

如果打印变量为整数类型,可指定输出整数格式。

格式化字符说明
/x以十六进制的形式打印出整数。
/d以有符号、十进制的形式打印出整数
/u以无符号、十进制的形式打印出整数。
/o以八进制的形式打印出整数。
/t以二进制的形式打印出整数。
/f以浮点数的形式打印变量或表达式的值。
/c以字符形式打印变量或表达式的值。
# 如果变量为整型,默认以十进制输出
p/t 变量名

打印变量类型

ptype 变量名

#举例
(gdb) ptype i
type = int
(gdb) ptype array[i]
type = int
(gdb) ptype array
type = int [12]

display

当我们想频繁查看某个变量或表达式的值从而观察它的变化情况时,使用 display 命令。

#在变量的范围内 , 自动打印变量的值 (设置一次后自动打印)
(gdb) display 变量名

#以指定的输出格式打印变量的值 
(gdb) display/f  变量名 
  • 查看display自动显示的变量列表信息

info display

# 打印 自定显示的变量信息
(gdb) info display
Auto-display expressions now in effect:
Num Enb Expression
1:   y  i
2:   y  array[i]
3:   y  /d array[i]
参数含义
Num变量或表达式的编号,GDB 调试器为每个变量或表达式都分配有唯一的编号
Enb表示当前变量(表达式)是处于激活状态还是禁用状态,如果处于激活状态(用 y 表示),则每次程序停止执行,该变量的值都会被打印出来;反之,如果处于禁用状态(用 n 表示),则该变量(表达式)的值不会被打印。
Expression被自动打印值的变量或表达式的名字

  • 取消自动显示

取消自动显示可以有两种方式:删除这个自动显示变量以及设置禁止状态

  • 删除自动显示变量

undisplay 编号 or delete display 编号

undisplay num [num1 ...]
delete display num [num1 ...]
  • 设置禁止状态

disable or enable

disable display num [num1 ...]
enable  display num [num1 ...]

这些命令后面可以是一个或者多个编号,也可以是num1-num2表示一个范围

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

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

相关文章

【CLIP综述】CLIP在医学影像中的应用(二)

原文传递:CLIP in Medical Imaging: A Comprehensive Survey 其他综述篇:   【SAM综述】医学图像分割的分割一切模型:当前应用和未来方向   【CLIP综述】CLIP在医学影像中的应用(一) 4、基于CLIP的应用&#xff08…

OD_2024_C卷_200分_10、部门人力分配【JAVA】【二分法 + 双指针】

说明 输入数据两行,第一行输入数据3表示开发时间要求,第二行输入数据表示需求工作量大小,输出数据一行,表示部门人力需求。当选择人力为6时,2个需求量为3的工作可以在1个月里完成,其他2个工作各需要1个月完…

​​​​​​​ARCGIS API for Python进行城市区域提取

ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用、功能强大的Python库,以及大数据分析能力,可轻松实现实时数据、栅格数据、空间数据等多源数据的接入和GIS分析、可视化,同时提供对平台的空间数据管理和组织管理功能…

Visual C++ 2005 可以生成清单信息了

在 Visual C 2005 中,我们可以通过 #pragma 指令来生成你想要的清单信息,这项功能可以简化新版本通用控件的使用。 例如,下面的代码可以指示链接器,将通用控件的新版本(6.0.0.0)链接到应用程序中。 // do not use – see discussi…

01 数据结构引入 和 顺序表

阅读引言: 从本文开始给大家带来我在复习过程中写的数据结构的代码, 分享给需要的同学 一、数据结构引入 1.数据结构解决什么问题 数据结构可以将杂乱无章的数据管理起来, 提高数据的访问效率 计算机处理的对象(数据&#xff09…

2022 年广西职业院校技能大赛高职组《云计算》赛项赛卷

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 某企业拟使用 OpenStack 搭建一…

YOLOv8独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

WordPress高端后台美化WP Adminify Pro优化版

后台UI美化WP Adminify Pro修改自定义插件,适合建站公司和个人使用,非常高大上,下载地址:WP Adminify Pro优化版 修复记录: 1、修复已知BUG 2、修复手机版兼容问题 3、修复打开速度,原版打开速度太慢 4…

华为数通方向HCIP-DataCom H12-821题库(多选题:121-140)

第121题 以下哪些事件会导致IS-IS产生一个新的LSP? A、引入的IP路由发送变化 B、周期性更新 C、接口开销发生了变化 D、邻接Up或Down 【参考答案】ABCD 【答案解析】 第122题 以下哪些协议既支持网络配置管理又支持网络监控管理? A、Telemetry B、NETCONF C、SNMP D、LLDP …

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置前言第1章 设置字体颜色第2章 设置字体大小第3章 设置代码区背景颜色总结 前言 编程软件环境最好就设置一个自己喜欢的界面进行显示,这样看起来会比较舒服些…

重生奇迹MU觉醒弓箭手技能有哪些

1、普攻:向前方射出箭矢,造成一定的物理输出。 2、冰封箭:弓箭手射出一发冰冻的箭矢,造成一定的范围伤害。 3、精灵祝福:可以召唤一只守护精灵,为自己加血治疗。 4、多重箭:弓手射出扇形范围…

c++基础知识之父类地址和基类地址一定相同?

背景 hi,粉丝朋友们: 大家好!这两天在分析智能指针Refbase相关内容时候,debug打印相关记录一直有个颠覆我观念的问题一直让我无比纠结。 本质原因可能还是java代码的思维去理解c导致的。 情况如下: java代码 public …

基于PHP的餐厅管理系统APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 MVC 3 1.2 ThinkPHP 3 1.3 MySQL数据库 3 1.4 uni-app 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 7 2.3 非功能需求 8 2.4 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.2 系统详细设计 10 3.3 本章小…

【初始MongoDB】MongoDB的使用(对比MySQL)

MongoDB简介 1、NoSQL简介 NoSQL(NoSQL Not Only SQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储…

你是否遭遇过管理多种远程连接的混乱场面,介绍你一款方便统一的管理神器:1Remote

网管小贾 / sysadm.cc 约瑟夫是一个外国小伙儿,金发碧眼高鼻梁,年岁在35左右。 那天与他短暂的相处令我印象深刻。 那是某一年的夏天,我去南方某岛游玩,在一处僻静的口袋公园中偶遇了约瑟夫。 他当时正坐在长椅上,摆…

Redis精讲

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

matlab阶段学习笔记小节2

syms定义符号变量 求极限 第二题 第三题 limit(y,n,inf);求的的函数y关于自变量n在无穷处(inf)的极限 exp(2)即指数为2,底为e,也就是e^2 求导数 第一题 log(x)默认是以e为底的指数函数,也就是ln(x). 使用diff(f)对函数进行求…

机器视觉学习(一)—— 认识OpenCV、安装OpenCV

目录 一、认识OpenCV 二、通过pip工具安装OpenCV 三、PyCharm安装OpenCV 一、认识OpenCV OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一个跨平台的计算机视觉库,最初由威尔斯理工学院的Gary Bradski于199…

什么是序列化?序列化的作用是什么?Java 中如何实现序列化和反序列化?

一、序列化简述 序列化是指将结构化的数据( 例如对象 )转化成一个字符串 / 字节数组。转化过程中,不会造成数据信息部分丢失。 反序列化则为反向操作,将已经进行过序列化之后的数据还原回原本的结构化数据。正是序列化中需要保证转化之后的数据信息不会…
最新文章