Linux工具——gdb

news2024/12/28 17:46:36

目录

一,gdb简介

二,gdb的指令

1.查看gdb是否有下载

2.需要明确的知识点

 3.调试指令

1.打开调试代码

 2.以某行为起点显示代码

3.打断点,查看断点,删除断点,禁用断点,启用断点

4.逐过程,逐语句,断点与断点之间的跳转。

5,监视变量

6.其它命令


一,gdb简介

gdb其实就是Linux下的调试工具。这个调试工具具有许多的功能。比如说打断点,监视,在debug模式下运行代码等等。

二,gdb的指令

在gdb这个工具里边具有许多的指令,今天我们只学习最简单的几条指令来帮助我们能够上手gdb这个调试工具。

1.查看gdb是否有下载

这条指令是:gdb -- v。如下:

显示了这样的信息就表示你的Linux下已经装载了gdb这个调试工具了。如果显示没有下载这个工具的话便可以使用yum工具进行下载。如下:

因为我是普通账户所以要用到sudo指令来下载这个工具。

2.需要明确的知识点

在这里我们需要明确的便是在Linux下使用gcc编译好的可执行文件的默认模式是release模式。那我们该如何证明呢?其实我们只需要将默认模式下编译好的代码的大小与使用-g选项编译好的代码进行大小比较通过两者的大小便能证明这一点。如,现在我写了以下代码:

#include<stdio.h>
  2 int Addtotop(int top)
  3 {
  4    int sum = 0;
  5    int i = 1;
  6    for(;i<=top;i++)
  7    {
  8      sum+=i;
  9    }
 10    return sum;
 11 }
 12 
 13 
 14 int main()
 15 {                                                                                                                                                                                      
 16   printf("%d\n",Addtotop(100));
 17   return 0;
 18 }

现在再来写一个Makefile文件,该文件如下:

code:gdb_test.c                                                                                                                                                                        
  2   gcc $^ -o $@
  3 .PHONY:clean
  4 clean:
  5   rm- f code

现在便生成了一个文件叫作code,然后我在指令后面加上选项-g便能生成debug版本的文件,操作如下:

1 code-g:gdb_test.c                                                                                                                                                                      
  2   gcc $^ -o $@ -g//加入指令-g能够生成debug模式的可执行文件
  3 .PHONY:clean
  4 clean:
  5   rm- f code

现在我的列表里便有如下可执行文件,一个是默认生成的code,一个是debug模式下的code-g:

现在使用ll指令查看这两个文件的信息如下:

可以看到在对同一份代码,默认生成的可执行文件code的大小是8392,使用-g选项生成的可执行文件code-g的大小是9568从这里便可以证明code可执行文件明显就是release模式下的可执行文件。

 3.调试指令

1.打开调试代码

打开调试代码的指令是gdb+debug模式下的可执行文件。如:

成功打开会显示以下信息:

 2.以某行为起点显示代码

这样做的指令是l+行数,比如我要从第零行开始显示:

可以发现这段代码是从第零行开始显示了,但是只显示了十行。如果要全部显示的话多按几下回车键就行了:

3.打断点,查看断点,删除断点,禁用断点,启用断点

这些操作在调试代码时都是必不可少的操作,现在我们来一一对这些操作的指令介绍一番:

1.打断点b+代码行号,b+文件名+冒号+代码行号,b+函数名,b+文件名+冒号+函数名

打断点如下:

2.查看断点:info+b

在上面打完断点以后我便可以查看这些断点,操作如下:

使用info b选项后便可以查看这些断点的信息。

3.删除断点:d+断点的断点编号

在这里要注意的是我们在删除断点时删除的时d后面加的是断点的编号而不是行号。比如现在我有如下断点:

比如我要删除第四行的断点,我的指令便是d 1 而不是 d 4:

4.禁用断点:disable+断点编号

如我要禁用掉第二个断点:

5.启用断点:enable+断点编号

如我要启用第二个断点:

4.逐过程,逐语句,断点与断点之间的跳转。

在Linux下这两个功能实现的按键便是n与s。n表示逐过程,s表示逐语句。当使用逐过程的方式调试的时候,当遇到函数的时候就会跳过整个函数。当使用逐语句的时候,当遇到函数的时候就会进入到函数中一条一条指令的执行。断点与断点之间跳转的指令是c,表示continue。当执行这个指令时,程序跑起来时就会按照断点与断点之间的代码块一块一块的跑起来。

5,监视变量

要发现程序之中是否有错误,最重要的便是监视变量的值。我们该如何监视呢?这里有三种指令:1.p 2.display 3.undisplay。

1.这里的p+x表示显示变量x的值,但是使用p做不到常显示。使用p只能在这一步执行时显示要显示的值。

2.如果要常显示一个值的话就要使用display+x命令,这样在每一次执行代码时都能够显示x变量的值。

3.undisplay+变量的显示编号表示取消对变量x的常显示。

6.其它命令

在gdb下,除了上面的重要的命令之外。还有些不那么重要的命令。

1.finish:表示将一个函数给执行完。

2.bt:查看调用堆栈。

3.set var +变量名+数值:给变量赋值。

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

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

相关文章

灵活运用OSI模型提升排错能力

1.OSI模型有什么实际价值&#xff1f; 2.二层和三层网络的区别和应用&#xff1b; 3.如何通过OSI模型提升组网排错能力&#xff1f; -- OSI - 开放式系统互联 - OSI参考模型 - 一个互联标准 -- 软件硬件 - 定义标准 数据通信的标准 -- 厂商 思科 华为 华三…

【Spring】Spring Security学习笔记

基本概念 概念定义认证判断一个用户身份是否合法的过程(登录过程)会话为了避免用户的每次操作都进行认证, 将用户的信息保存在会话中. 常见的会话有基于session的模式和基于token的模式授权校验用户是否有权限访问某个资源 认证是为了验证用户的身份; 授权是为了验证用户是否有…

生长刺激表达基因2蛋白(ST2)介绍

生长刺激表达基因2蛋白&#xff08;Growth stimulation expressed gene 2&#xff0c;ST2&#xff09;&#xff0c;也称为T1&#xff0c;IL1RL1或Fit1&#xff0c;编码基因定位于染色体2q12位点上&#xff0c;约40kb。属于白细胞介素-1&#xff08;interleukin-1&#xff0c;IL…

2023华为杯数学建模研赛E题全解析

2023华为杯数学建模研赛E题解析&#xff0c;完整版已出!!! 包含所有模型、代码、结果&#xff0c;39页技术文档&#xff0c;详细内容如下! 免费版链接已放在下面&#xff0c;需要的同学可以直接自取~ 【云顶数模】2023研究生数学建模免费链接&#xff1a; https://pan.baid…

Python爬虫教程:解析网页中的元素

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在我们理解了网页中标签是如何嵌套&#xff0c;以及网页的构成之后&#xff0c; 我们就是可以开始学习使用python中的第三方库BeautifulSoup筛…

194、SpringBoot -- 下载和安装 Erlang 、 RabbitMQ

本节要点&#xff1a; 一些命令&#xff1a; 小黑窗输入&#xff1a; rabbitmq-plugins enable rabbitmq_management 启动控制台插件 rabbitmq-server 启动rabbitMQ服务器 管理员启动小黑窗&#xff1a; rabbitmq-service install 添加rabbitMQ为本地服务 启动浏览器访问“h…

Goby 漏洞发布|Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434)

漏洞名称&#xff1a;Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞&#xff08;CVE-2019-5434&#xff09; English Name&#xff1a; Revive Adserver adxmlrpc.php Remote Code Execution Vulnerability (CVE-2019-5434) CVSS core: 9.0 影响资产数&a…

Go sync.Cond 原理

文章目录 前言newCondWaitSignalBroadcast和 channel 比较的优势 前言 sync.Cond 基本很少使用&#xff0c;应为大部分都能使用 channel 代替sync.Cond 通常是基于 sync.Mutex 扩展的主要就四个方法 newCond(l locker) 创建CondWait() 阻塞等待Signal() 唤醒其中一个Broadcast…

AI 编码助手 Codewhisperer 安装步骤和使用初体验

文章作者&#xff1a;为了自己加油 最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手 Amazon Code Whisperer&#xff0c;可以实时提供代码建议。在编写代码时&#xff0c;它会自动根据现有的代码和注释给出建议。Amazon Code Whisperer与 GitHub Copilot 类似&#xff0c;…

Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks

目录 摘要引言贡献新的基于ORAM的防御控制信道攻击优化技术开源实现 背景Intel SGXORAMRing ORAM的组成ORAM树Position Map (位置图)Stash Ring ORAM的访问步骤1、Position Map Lookup 位置映射查找2、ReadPath3、EvictPath4、Early Reshuffles 早期的重新洗牌 相关工作和动机S…

vue3硅谷甄选01 | 使用vite创建vue3项目及项目的配置 环境准备 ESLint配置 prettier配置 husky配置 项目集成

文章目录 使用vite创建vue3项目及项目的配置1.环境准备2.项目配置ESLint校验代码工具配置 - js代码检测工具1.安装ESLint到开发环境 devDependencies2.生成配置文件:.eslint.cjs**3.安装vue3环境代码校验插件**4. 修改.eslintrc.cjs配置文件5.生成ESLint忽略文件6.在package.js…

gym_unity学习笔记

最近学了一段时间gym_unity&#xff0c;把一些资料留在这里 实例 实例gym_unity训练RollerBall&#xff1a;https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall&#xff1a;https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…

大数据学习技术栈及书籍推荐

作为一名开发人员&#xff0c;特别是后端开发人员&#xff0c;随着网络数据量的持续增长&#xff0c;拥有强大的大数据处理能力已经成为每个公司或产品&#xff08;尤其是2C业务&#xff09;的必备条件。以下是我在网络上搜集和自身研究的基础上&#xff0c;为您推荐的技术栈和…

【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(2)· 正交表 · 场景设计 · 常见案例练习

【测试开发】用例篇&#xff08;2&#xff09; 文章目录 【测试开发】用例篇&#xff08;2&#xff09;1. 正交表法1.1 什么是正交表1.2 两个重要概念1.3 如何通过正交表设计测试用例1.3.1 充分理解需求1.3.2 确定因素、确定水平1.3.3 allpairs画正交表1.3.4 补充正交表1.3.5 将…

2024年浙江工业大学MPA项目适不适合报考?几点建议

浙江工业大学公共管理硕士&#xff08;MPA&#xff09;项目的学习是在浙工大小和山校区&#xff0c;近两年的发展速度相对比较快&#xff0c;目前每年都可以招到100的生源&#xff0c;而报考的考生也越来越多。究竟这个项目的综合竞争力怎么样&#xff0c;适不适合报考&#xf…

1791_树莓派bash入门杂志_Essentials_Bash_v1

全部学习汇总&#xff1a; GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. (github.com) 拿到一份树莓派早期的宣传电子杂志资料&#xff0c;看了一下感觉还是有一些帮助。针对里面多少有一些共鸣的地方&#xff0c;做一个简单的整理。 1. 命令行…

原来,C语言操作Mysql这么简单

迷途小书童 读完需要 10分钟 速读仅需 4 分钟 1 简介 MySQL 是一种流行的关系型数据库管理系统&#xff0c;而 C 语言是一种强大的编程语言&#xff0c;可以与 MySQL 进行交互。本篇博文将介绍如何使用 C 语言来连接、查询和操作 MySQL 数据库。我们将涵盖原理实现、安装步骤、…

windows/ubuntu怎么修改hosts文件

windows系统修改方法&#xff1a; 第一步&#xff1a;用管理员权限打开记事本&#xff0c;或者visual studio。 第二步&#xff1a;用记事本或者vs打开地址C:\Windows\System32\drivers\etc\hosts文件&#xff0c;这个时候就可以直接修改了 Ubuntu22 LTS系统修改方法&#xf…

c++STL案列一评委打分

案例描述 有5名选手:选手ABCDE&#xff0c;10个评委分别对每一名选手打分&#xff0c;去除最高分&#xff0c;去除评委中最低分&#xff0c;取平均分 实现步骤 1.创建五名选手&#xff0c;放到vector中 2.遍历vector容器&#xff0c;取出来每一个选手&#xff0c;执行for循环…

【自然语言处理】【大模型】MPT模型结构源码解析(单机版)

相关博客 【自然语言处理】【大模型】MPT模型结构源码解析(单机版) 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版) 【自然语言处理】【大模型】极低资源微调大模型方法LoRA以及BLOOM-LORA实现代码 【…