【Linux系统】第七篇:Linux调试器gdb的使用
文章目录
- 一、gdb简介
- 二、gdb的安装
- 三、gdb使用
- 3.1、release和debug版本
- 3.2、gdb基本使用命令
- 1、启动gdb
- 2、调试命令
- 3、显示代码(list)
- 4、断点命令(breakpoint)
- 5 、变量命令(variable)
- 6、特殊调试命令
- 7、调用堆栈命令
- 8、显示当前函数内临时变量:info locals
一、gdb简介
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;
二、gdb的安装
sudo yum install -y gdb
三、gdb使用
3.1、release和debug版本
在进行程序开发的过程中,有两个版本,一个是release版本,一个是debug版本。我们都知道,如果要进行调试程序,这个程序必须的debug版本的我们才可以进行调试的。
在Linux中查看程序版本:
readelf -S test
这里我们可以发现并没有关于debug的信息。其实在Linux中,gcc/g++
编译器默认生成的版本是release版本的,如果想进入debug版本,我们就要带-g
选项
gcc mytest.c -o mytest -g
总结:
- 程序的发布方式有两种,debug模式和release模式
- Linux中gcc/g++编译器默认生成的可执行程序是release模式
- 要使用gdb调试,必须加上 -g 选项
3.2、gdb基本使用命令
1、启动gdb
gdb + 可执行程序文件,如下:
gdb mytest_g
gdb -q mytest_g //表示不打印gdb版本信息,界面较为干净;
2、调试命令
与vs中的调试命令进行对比:
gdb中:
名称 | 命令 | 解释 |
---|---|---|
开始运行 | run(r) | 相当于开始调试F5 ,执行代码后会在断点处停下 |
逐语句 | step(s) | 相当于F11 ,有函数会进入函数内部 |
逐过程 | next(n) | 相当于F10 ,不会进入函数内部,执行整条语句; |
像逐过程、逐语句这样的命令一次输入之后,可直接回车仍会再次执行。
vs2019中:
运行演示:
-
直接调试
-
逐过程
-
逐语句
3、显示代码(list)
名称 | 命令 | 解释 |
---|---|---|
可指定行号 | list(l) + [N] | 从第 N 行开始显示 10 行代码,可接着上次的位置继续打印 |
可指定函数名 | list(l) + Name | 从函数起始位置左右开始显示代码 |
4、断点命令(breakpoint)
名称 | 命令 | 解释 |
---|---|---|
某行打断点 | b + N | 在某行打上断点 |
函数打断点 | b + FuncName | 在函数内起始位置打断点 |
查看断点 | info + b | 显示断点信息列表 |
删除断点 | d + N | 删除序号为 N 的断点,省略序号就是删除所有断点 |
启用断点 | enable + N | 启用序号为 N 的断点,省略序号就是启用所有断点 |
禁用断点 | disable + N | 禁用序号为 N 的断点,省略序号就是禁用所有断点 |
5 、变量命令(variable)
名称 | 命令 | 解释 |
---|---|---|
监视变量 | display + ValName | 以列表的形式常显示在屏幕下方,类似于vs中的监视 |
取消监视 | undisplay + N | 去掉监视列表中的序号为 N 的变量的常显示 |
查看变量 | p + Name | 打印变量的值,不会常显示 |
修改变量 | set + Name | 设置指定变量的值 |
6、特殊调试命令
名称 | 命令 | 解释 |
---|---|---|
结束当前函数 | finish | finish 会直接结束当前函数的调用,并停止在函数返回位置 |
继续运行 | continue(c) | continue 继续运行至下一个断点,相当于F5 |
运行至指定行 | until + N | 运行至当前函数内部的第 N 行 |
7、调用堆栈命令
名称 | 命令 | 解释 |
---|---|---|
调用堆栈 | breaktrace/bt | 查看程序各级栈帧的调用情况 |
8、显示当前函数内临时变量:info locals
名称 | 命令 | 解释 |
---|---|---|
显示当前函数内临时变量 | info locals | 显示当前函数内临时变量 |
相关文章:
![](https://img-blog.csdnimg.cn/9b347613c5b54eb1ab026f02776e1b47.png)
【Linux系统】第七篇:Linux调试器gdb的使用
文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码(list)4、断点命令(breakpoint)5 、变量命令(variable)6、特殊调试命令7、调用…...
![](https://www.ngui.cc/images/no-images.jpg)
Shell 特殊变量及其含义
shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n(n≥1)传递给脚本或函数的参数。n 是一个数字,表示…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode 2396. 严格回文的数字
如果一个整数 n 在 b 进制下(b 为 2 到 n - 2 之间的所有整数)对应的字符串 全部 都是 回文的 ,那么我们称这个数 n 是 严格回文 的。 给你一个整数 n ,如果 n 是 严格回文 的,请返回 true ,否则返回 fals…...
![](https://www.ngui.cc/images/no-images.jpg)
【RocketMQ】源码详解:Broker启动流程
Broker启动 入口: org.apache.rocketmq.broker.BrokerStartup#main broker的启动主要分为两部分:1.创建brokerController 2.启动brokerController。与平时进行业务开发时不同的是,这里的BrokerController相当于Broker的一个中央控制器类&…...
![](https://www.ngui.cc/images/no-images.jpg)
vue事件
1. 事件传参 <button click"clickEvt($event, 22)">点我</button>2. 事件修饰符 prevent:阻止默认事件stop:阻止事件冒泡(加到子元素)once:事件只触发一次capture:使用事件的捕获模…...
![](https://img-blog.csdnimg.cn/img_convert/d9170e1401299bd00c2459253ffcddf5.png)
研报精选230220
目录 【行业230220国信证券】银行业行业专题:经济复苏中的优质中小银行【行业230220国信证券】汽车行业周报(2023年第7周):吉利将发布新品牌“银河” ,2022年宇通纯电动客车获欧洲销量冠军【行业230220开源证券】商贸零…...
![](https://www.ngui.cc/images/no-images.jpg)
kubernetes sd configs配置详解
1.基于Kubernetes的服务发现 kubernetes_sd_config 这个是以角色(role)来定义收集的,Kubernetes SD配置允许从Kubernetes的RESTAPI中检索scrape目标,并始终与群集状态保持同步。 凡<role>必须是endpoints,service,pod&…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux查看文件的命令
目录 1、tail 2、head 3、cat 4、more 5、sed 6、less Linux查看日志的命令有多种: tail、cat、tac、head、echo等,本文只介绍几种常用的方法。 1、tail 命令格式: tail[必要参数][选择参数][文件] -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信…...
![](https://img-blog.csdnimg.cn/1327af1ef29146a5a3de394c5ac64156.png)
如何单独清除某个网页的缓存(reload)
有时候在自己服务器上调试的时候,刷新一直不更新,样式改了也看不到,就很烦 今天教你一个方法快速清除 F12 控制台情况下右击左上角的刷新 这三个分别代表: ①正常重新加载(Ctrl R): 正常重新加载 此方法,浏览器发送请求时会…...
![](https://img-blog.csdnimg.cn/img_convert/4b22c4403c644bb48c65276e16d3b9bf.png)
魔兽世界经典怀旧服务器架设教程
准备工具:MySQL服务端服务器最重要的你需要会技术、要不然都瞎扯 给你东西你也看不懂。教程开始:安装MySQL并创建数据库安装MySQL社区版,并配置SQL服务器。安装SQLyog。利用其登录,创建realmd、characters、mangos、scriptdev2数据…...
![](https://img-blog.csdnimg.cn/img_convert/1d27946fa2c1dd7e3a0887b1f4df6137.png)
Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别
文章目录01. 迭代器 Iterator 是什么?02. 迭代器 Iterator 有什么特点?03. 迭代器 Iterator 怎么使用?04. 如何边遍历边移除 Collection 中的元素?05. Iterator 和 ListIterator 有什么区别?06. 数组和集合的区别&…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode 1769. 移动所有球到每个盒子所需的最小操作数
有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。…...
![](https://www.ngui.cc/images/no-images.jpg)
MKS SKIPR V1.0船长版(Voron 2.4 R2)配置简要笔记
第一次用MKS SKIPR V1.0,设置过程中,也不知道怎么回事,跟现有的资料有些出入。首先,基本的配置调试可以参考官方的使用说明。 MKS SKIPR V1.0 使用说明书 这个说明比较简单,很多深一点的东西没有提现,不过…...
![](https://img-blog.csdnimg.cn/3ab4ea0d46624371954c8a1fe805804d.png)
90后,转行软件测试3年,从月入7000+到月入过万,整理出的这一万字经验分享。
周一发工资了,到手12857.65,美滋滋 今年是我毕业参加工作的第3年,工资终于来到5位数了。上一家公司月薪7000,实际拿到手就6450左右,感觉今年真的是元气满满啊,工资翻倍,良好的人生开端。 想起…...
![](https://img-blog.csdnimg.cn/f43a590b591542a78147ea4539f3fe9b.png)
Java之关于String字符串笔试面试重点
目录 一.关于字符串的常量池 1.关于字符串产生的三种方式 2.关于字符串的常量池 3.直接赋值法和new的方式产生对象的区别 二.关于intern方法 1.情况一(已经包含) 2.情况二(已经包含) 3.情况三(未包含) 4.情况四 三.关于字符串的不可变性 1.了解字符串的不可变性 2.Str…...
![](https://img-blog.csdnimg.cn/4a24fdbf2cbe4d11bc39914851d3b71b.png)
mdio协议
1. 简介 MDIO接口中有特定的术语定义总线上的各种设备,驱动MDIO总线的设备被定义为站管理实体(STA),而被MDC管理的目标设备称为可被MDIO管理的设备(MMD)。 STA初始化MDIO所有的通信,同时负责驱动…...
![](https://www.ngui.cc/images/no-images.jpg)
kubectl命令
kubectl命令是操作 Kubernetes 集群的最直接和最高效的途径。 1、kubectl自动补全 $ source <(kubectl completion bash) # setup autocomplete in bash, bash-completion package should be installed first. $ source <(kubectl completion zsh) # setup autocomple…...
![](https://www.ngui.cc/images/no-images.jpg)
题库-JAVASE01
文章目录1.JAVA开发环境2.JAVA变量3.JAVA基本类型4.运算符和表达式5.分支结构6.循环结构7.数组8.方法1.JAVA开发环境 (单选题)在Java中,以下描述错误的是( ) A…class是源文件 B…java是编译前的源文件 C…class是编译后的文件 D.Java程序需…...
![](https://img-blog.csdnimg.cn/1839269acfa144ccab2ed4a8be4b5325.png)
Java序列化机制
Java序列化机制 概述 java中的序列化可能都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的…...
![](https://img-blog.csdnimg.cn/img_convert/ea14d13b8e91f7af2323cde1a0bc223f.jpeg)
3款强大到离谱电脑软件,都是效率神器,从此远离加班
闲话少说,直接上狠货。 1、ImageGlass ImageGlass是一款值得吹爆的电脑图片浏览工具,使用极其方便,体积50M左右,非常小巧,功能却强大到离谱,ImageGlass打开图片的速度极快,实现快速不同图像间切…...
![](https://img-blog.csdnimg.cn/3d9ac50032e347f1bb36bbf7a190ae96.png)
【项目】Vue3+TS CMS 登录模块搭建
💭💭 ✨:Vue3 TS 💟:东非不开森的主页 💜: keep going💜💜 🌸: 如有错误或不足之处,希望可以指正,非常感谢😉 Vue3TS一、…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 8 的那些常见写法
前言 现在Java已经发展到Java19版本了,由于Java后面一些版本,就开始商用收费了,所以目前绝大多数公司的JDK版本都是采用的之前稳定且免费的1.8版本,也就是Java8,这个版本已经能满足几乎所有业务的需求开发了ÿ…...
![](https://img-blog.csdnimg.cn/e13f500da02a4d4c99324ddc326e5749.png)
PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)
目录 一、打开数据库表 1. 写打开数据库的槽函数 2. 运行后发现数据库可以打开了 3. ODBC配通了,数据库还是打不开 4. 写在tableView上显示数据库表的函数 5. 运行后发现表可以显示了 6. 代码分析 7. 添加列名称 8. 根据内容调整列宽 9. 备注:…...
![](https://img-blog.csdnimg.cn/4a93dcf091cc497b83d3cef1289cb03a.png)
QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏
QT 串口调试工具第一节 虚拟串口工具安装第二节 QT创建一个基于QWidget的项目第三节 UI界面设计第三节 项目头文件widget.h第四节 项目实现文件widget.cpp第五节 main函数第六节 编译结果重点第七节 使用QT打包程序,不安装QT的电脑可使用第一节 虚拟串口工具安装 -…...
![](https://img-blog.csdnimg.cn/ac31b6ae18b5490ca805ab80e8363f19.png)
OpenSumi 是信创开发云的首选
原文作者:行云创新技术总监 邓冰寒 引言 随着云原生应用的日益普及,开发上云也逐步被越来越多的厂商和开发者接受,在这个赛道国内外有不少玩家,国外的 GitHub Codespaces、CodeSandbox,GitPod、亚马逊 Cloud9…...
![](https://img-blog.csdnimg.cn/1b76b3fc6e264e17a8a9b1d4da9e3170.png)
JdbcTemplate常用方法解析
文章目录1.JdbcTemplate简介2.JdbcTemplate主要方法:3.常用方法介绍update()方法增删改query()查询方法1.JdbcTemplate简介 JdbcTemplate是Spring JDBC的核心类,借助该类提供的方法可以很方便的实现数据的增删改查。 Spring对数据库的操作在jdbc上面做…...
![](https://img-blog.csdnimg.cn/img_convert/847c79ab6f84697ee27dadd24fac0d4b.jpeg)
生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC
1、试剂基团反应特点(Reagent group reaction characteristics):PC alkyne-PEG3-Biotin含一个炔烃和一个 PEG 链接的可光裂解生物素基团。含 3 个单元 PEG 的 ADC linker,生物素本身是个游离的小分子,在生物实验中常常…...
![](https://img-blog.csdnimg.cn/b8ccec91b881418b80ab6f97e898aacf.png#pic_center)
CS224W课程学习笔记(三):DeepWalk算法原理与说明
引言 什么是图嵌入? 图嵌入(Graph Embedding,也叫Network Embedding) 是一种将图数据(通常为高维稠密的矩阵)映射为低微稠密向量的过程,能够很好地解决图数据难以高效输入机器学习算法的问题。…...
![](https://img-blog.csdnimg.cn/img_convert/c50878fb610105f0d2d365e5240b0171.jpeg)
rk3568 开发板Ubuntu系统说明
Ubuntu MinimalUbuntu Minimal系统基于Ubuntu 64bit系统构建,目前发布有Ubuntu18.04这个版本。与Ubuntu Desktop 相比具有以下特性:没有桌面环境,占用资源少,在简化网络管理之后,只需40M内存;针对嵌入式平台…...
![](https://www.ngui.cc/images/no-images.jpg)
Windows和Linux常用HASH算法使用命令
Windows和Linux常用hash算法使用命令 Windows,以文件xxx.zip为例 Windows 求文件 md5 certutil -hashfile xxx.zip md5Windows 求文件 sha1 certutil -hashfile xxx.zip sha1Windows 求文件 sha256 certutil -hashfile xxx.zip sha256Linux,以文件xxx.z…...
![](/images/no-images.jpg)
网站做等保测评/廊坊seo关键词优化
https://blog.csdn.net/zzq900503/article/details/49123387 运用场景: 导出excel后 发现 数值类型的字段 在excel中表现为文本类型,这样不利于计算。 解决办法: // 创建一个可写入的工作表 // Workbook的createSheet方法有两个参数,第一…...
![](/images/no-images.jpg)
哈尔滨一恒建设/济南网站seo优化
介绍 Go 的 slice 类型提供了一种方便有效的方法来处理类型化数据序列。切片类似于其他语言中的数组,但具有一些不寻常的属性。本文将介绍切片是什么以及它们的使用方法。 数组 切片类型是建立在 Go 的数组类型之上的抽象,因此要理解切片我们必须首先理解数组。 数组类型定义…...
![](https://img-blog.csdnimg.cn/2022010618485518335.png)
注册网站需要多久/南宁网站推广营销
默认占用:64M的内存 修改内存的方式: 1、某一类,右键选择--Run Configurations 2、选择--Arguments 3、在VM argments中输入内容,如:-Xmx80m 转载于:https://www.cnblogs.com/danyuzhu11/p/6180681.html...
![](/images/no-images.jpg)
自己做网站在线看pdf/百度智能云官网
http://www.cnblogs.com/wenjiang/p/3180324.html handleMessage 好用转载于:https://www.cnblogs.com/userbibi/p/3357501.html...
![](/images/no-images.jpg)
景观设计公司排名前十强/百度排名优化咨询电话
目录框架与类库一、重用技术二、框架与类库的主要差别框架与类库 一、重用技术 在区别二者之前,首先需要了解软件开发中的重用(Reuse)技术。 重用技术在软件开发中重要性 IT产业: 减小开发的工作量 缩短软件开发周期࿰…...
![](/images/no-images.jpg)
响应式网站的设计尺寸/深圳seo培训
单一替换原则(一个类只完成自己的事, 别多管闲事)接口隔离原则(客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上)依赖转置原则(面向接口编程, 尽量…...