【学习笔记之Linux】工具之gdb

news2024/11/19 8:47:15

背景知识:

  首先我们要知道,程序的发布一共有两种模式,一种是debug模式,是我们程序员自己编写代码的模式,可以进行调试,这个模式下编译出来的程序是包含调试信息的;一种是release模式,是程序的发布模式,测试人员测的也就是这个模式编译出来的程序。release是debug进行优化之后的模式,体量比较轻。但是这个优化是电脑优化的,不是开发人员优化的。所以就有可能出现一些问题。也就造成了一个名场面,测试:你这个程序有个bug;开发:不可能,在我电脑都可以运行。
  在Linux系统中通过gcc/g++编译出来的二进制程序默认是release模式的。
  要使用gdb调试,必须要在源代码生成二进制程序的时候,加上-g选项。
在这里插入图片描述在这里插入图片描述

常用命令介绍:

  进入调试模式:gdb 要调试的文件

  list/l 行号:显示源代码,每次列10行,如果没有加行号默认从第一行开始列,第二次就从第11行开始列。如果加了行号,就会以行号为中间点列出十行,在行号大于6的情况下,会保证行号出现在第6行。如你输入l 7,它会显示的行号是2、3、4、5、6、7、8、9、10、11;
  list/l 函数名:列出某个函数的源代码;
  r/run:开始调试;
  n/next:单条执行,逐过程;
  s/step:进入函数调用,逐语句;
  b/break 行号:在某一行设置断点;
  break 函数名:在某个函数开头设置断点;
  info break:查看断点信息,因为gdb不是可视化的,不像vs看旁边有没点就能判断是否有断点,所以要知道有哪些断点就需要进行查看,这里的断点被整理成类似表格的东西显示出来,包含了许多信息;
  finish:执行到当前函数返回,然后停止等待命令;
  p/print:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  p 变量:打印变量值;
  set var:修改变量的值;
  c/continue:让暂停的程序继续运行;
  delete breakpoints:删除所有断点;
  delete breakpoints n:删除序号为n的断点;
  disable breakpoints:禁用断点;
  enable breakpoints:启用断点;
  i/info breakpoints:查看当前设置了哪些断点;
  display 变量名:跟踪查看一个变量,每次停下来都会显示它的值
  undisplay:取消对先前设置的变量的跟踪;
  until 行号:跳至行号位置;
  bt/breaktrace:查看各级函数调用及参数;
  i/info locals:查看当前栈帧局部变量的值;
  quit/[ctrl + d]:退出gdb。

在这里插入图片描述

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

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

相关文章

AntV G6 组织图使用(后端渲染数据)

一、业务场景: 点击按钮,跳转页面并显示该数据的组织架构图(类似于粒子效果) 二、问题描述: 初始写死的数据能显示,但是从接口请求到的数据赋上值 渲染不了 三、具体实现步骤: (1&…

python GUI And Tkinter 01

目录 一、基础介绍 二、创建窗口 1、创建完窗口后还需要知道窗口的相关属性 2、widget相关控件 3、原本tkinter有的Widget。 4、widget的共同属性 1. Configuration 2. Event Processing 3. Event callbacks 4. Alarm handlersafter(time,callback):间隔指定时间后调…

Python logging 库的『完整教程』

前言 本文的标题是『完整』。所谓『完整』,大意是想表达:提炼出一组最小的经验组合,并且能够快速应用于工程中,能 work,甚至能完美地 work。这篇文章就是想要做到『如何能完美地work』。 初衷 最原始的初衷就是&…

nmap 扫描数据分析

本案22端口为开放端口,110为未开放端口 Wireshark上使用下面的表达式 ip.addr192.168.104.127 and ip.addr192.168.104.61 and tcp.port22 ip.addr192.168.104.127 and ip.addr192.168.104.61 and tcp.port110 命令一、 nmap -sS SYN-->SYN ACK-->RST …

电脑技巧:Windows这些自带应用尽量不要删,否则影响系统运行

目录 第一种:带有“microsoft”字样的软件尽量不卸载。 第二种:带有“Intel”或者“英特尔”的程序名称不要卸载。 第三种:windows驱动程序包尽量不要卸载 第四种:Adobe flash player不建议卸载 当电脑太卡,运行变…

C/C++ - 从代码到可执行程序的过程

(1)预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下: 删除所有的#define,展开所有的宏定义。处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。处理“#inc…

简单工厂模式

简单工厂模式所谓组件:从设计上讲,组件就是能完成一定功能的封装体。小到一个类,大到一个系统,都可以称为组件,因为一个小系统放到更大的系统里面去,也就当个组件而已。模式定义:提供一个创建对…

servlet运用自定义分发优化servlet泛滥

servlet优化 Web 层的 Servlet 个数太多了,不利于管理和编写 我们发现每一个功能都需要定义一个 servlet,一个模块需要实现增删改查功能,就需要4个 servlet,模块一多就会造成servlet 泛滥。此时我们就想 servlet 能不能像 servi…

YOLOv6 训练自己的数据集

项目地址:https://github.com/meituan/YOLOv6 论文地址:https://arxiv.org/abs/2209.02976 论文解析:http://t.csdn.cn/0ZQbV YOLOv6 是一种专为工业应用设计的单级对象检测框架,具有硬件友好的高效设计和高性能。YOLOv6-N 在 NVI…

【windows】docker与docker-compose部署spring boot项目

看完不会用,我倒立**,保姆级教学 docker部署项目 采用Dockerfile部署 docker-compose部署项目 docker-compose部署,实际上是对容器的编排,以及容器间的一些依赖 比如一个springboot项目,需要使用redis,…

深入 Redis sds

文末有视频讲解 在上一个模块中,我和小伙伴们一起学习了 Redis 最核心的命令,主要涉及 String、List、Hash、Set、Sorted Set 五种数据结构的命令,同时,我们还介绍了每种数据结构的实战场景,并带领小伙伴们使用 Java 语…

11、ThingsBoard-租户配置

1、概述 租户配置(tenant profile)如其名是租户相关的配置,通俗一点就是给你这个租户的功能增加一些限制,如果你加钱,我就给你把限制设置高一点,thingsboard官方那个收费的版本不就是这样的吗?租户配置在系统层,系统管理员可以创建租户配置,然后使用租户配置为多个租…

centos7安装kubeadm

centos7安装kubeadm 一、基础设置 1、设置主机名 hostnamectl set-hostname master hostnamectl set-hostname node01vim /etc/hosts 192.168.198.169 master 192.168.198.170 note01hostnamectl hostnamectl 是在 centos7 中新增加的命令,它是是用来管理给定主机…

2023年我花费数小时整理的Java常用类进阶学习文档,你学会了吗?

文章目录1. 基本类型的包装类1.1 概念1.2 常用的属性1.3 常用的方法1.4 自动装箱和自动拆箱2. 字符串类2.1 String 类2.2 StringBuilder类2.3 StringBuffer类2.4 StringBuilder 的扩容机制3. 数字常用类3.1 Math 类3.2 Radom 类4. 枚举类5. 日期类5.1 Date 类5.2 DateFormat 类…

基于微信小程序的小区租拼车管理信息系统小程序

文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…

学习理解10G Ethernet Subsystem之IEEE1588

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 学习理解10G Ethernet Subsystem之IEEE1588前言原理简介one step/two step1PPSIP 设置前言 1588大多是走在报文中,主要通过一些报文交互来完成同步过程&#xff…

在Docker中安装Gitea

目录在Docker中安装Gitea1、拉取最新Gitea官方镜像2、实例化一个Gitea容器3、Gitea需要数据源,因此使用mysql作为后端数据库4、在mysql中创建一个新数据库,起名gitea5、访问Gitea主页http://host:3000,进入初始配置页在Docker中安装Gitea 1、…

【自学Python】Python位运算符

Python位运算符 Python位运算符教程 在 Python 中,位运算符主要是用于 数值类型 的二进制的运算。 Python位运算符语法 位运算符说 明案例备注&按位与a & b返回 a 和 b 相与的结果|按位或a | b返回 a 和 b 相或的结果^按位异或a ^ b返回 a 和 b 相异或的…

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题->…

Java中的equals()方法和hashCode的关系

文章目录1.Java中equals()方法比较的是什么?2.equals方法和hashcode的关系3.什么是hashCode3.1 hashcode有什么作用呢?4.关于重写equals()方法的两条规范5.代码实例1.Java中equals()方法比较的是什么? 最直接的回答就是看调用equals()方法的…