【Linux学习笔记】调试工具gdb

news2024/11/27 0:26:45

  • 1. gdb
  • 2. debug和release的认识
  • 3. gdb命令

1. gdb

gdb是Linux下的一个调试工具,主要内容是利用命令行来调试代码,下面我将以vs2019的调试操作逐一对应到gdb的调试命令。

首先我是在xshell连接远端云服务器搭配Linux环境来使用gdb的,第一步要做的就是下载gdb工具,具体怎么下载可以看yum工具部分内容。

下面写一个求和函数,来看看gdb是如何使用命令调试代码的。

  1 #include <stdio.h>
    //求和函数
  2 int addToSum(int begin, int end)
  3 {
  4     int sum = 0;
  5     int i = begin;
  6     while(i <= end)
  7     {
  8         sum += i;
  9         i++;
 10     }
 11     return sum;
 12 }
	//打印函数
 13 void Display(int sum)
 14 {
 15     printf("%d\n",sum);
 16 }
	//主函数
 17 int main()
 18 {
 19     int sum = addToSum(0,10);
 20     Display(sum);
 21     return 0;
 22 }     

2. debug和release的认识

当我写好了一个代码,并且成功编译后,然后我好奇地想去调试一下代码。

img为什么会这样子呢?原因是gcc工具编译好的代码是一个release版本的,这个版本是专门给用户使用的,是没有调试功能的。如果想要调试,那么就需要是debug版本的。

对应的来看到vs2019的编译。

img

从文件的体积上面,可以很清楚的区别debug和release版本的文件。

img

  • 怎么编译产生debug版本的文件呢?
  • 命令:gcc -o 文件名 -g 源文件
  • 操作:就是在原来编译的基础上,加上了-g选项,使其生成的文件是debug版本的。
  • 示范:img

3. gdb命令

  1. 显示代码的命令

命令:list(简写可以写l)

操作:会将代码显示到屏幕上,可以指定从第几行开始展示

示范:

img

img

  1. 打断点

命令:break + 行号(可以直接 b + 行号)

操作:将你所指定的行号打上断点。

示范:img

类似vs2019的F9打断点操作,类似下面的图。

img

  1. 查看断点信息

命令: info b

操作:将会在屏幕上显示你断点的信息

示范:img

  1. 删除断点

命令: d + 断点编号

操作:删除对应编号的断点

示范:img

  1. 调试运行

命令:run(可以简写r)

操作:直接调试运行到你的第一个断点

示范:

img

  1. 逐过程调试

命令:next(可以简写n)

操作:将从你现在所在的代码行开始,逐过程调试(如果有函数则不进入函数,跳到下一步),类似vs2019的F10

示范:

img

  1. 逐语句调试

命令:step(可以简写s)

操作:将从你现在所在的代码行开始,逐语句调试(如果有函数则进入函数,进入函数内部),类似vs2019的F11

示范:

img

  1. 运行到下一个断点

命令:continue(可以简写c)

操作:将直接跳转到下一个断点

img

img

  1. 完成当前函数跳出

命令: finish

操作:直接一步完成当前函数并退出函数

示范:

img

img

  1. 临时查看变量

命令:p + 想查看的变量

操作:将想查看的变量临时打印到屏幕上

示范:

img

  1. 持续查看变量

命令: display + 想查看的变量

操作:将在屏幕持续显示想要查看的变量,类似vs2019的监视窗口

示范:

img

  1. 取消持续查看变量

命令:undisplay + 变量前的编号

操作:将取消持续显示在屏幕的变量

示范:

img

  1. 跳转至指定行

命令: until + 行数

操作:将跳转到指定的行

示范:

img

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

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

相关文章

vue 和 后端交互

1.前端的路径请求是&#xff08;请求参数&#xff1a;key和value&#xff09;&#xff1a; this.$http.delete("http://localhost:8080/user/delete?id"id).then(res>{ 后端是接收前端参数 DeleteMapping("/delete")public String delete(Integer id)…

4.1 网络层提供的两种服务

思维导图&#xff1a; ## 第4章 网络层 ### 概述 网络层主要关注网络互连问题&#xff0c;其中重点是网际协议(IP)。掌握了IP协议的内容&#xff0c;我们就能理解互联网的工作机制。本章还涉及了ICMP、路由选择协议、IPv6特点、IP多播概念&#xff0c;以及VPN、NAT和MPLS。 #…

正点原子嵌入式linux驱动开发——字符设备驱动开发

经过之前这么多篇笔记的学习&#xff0c;Ubuntu操作系统以及完整的Linux系统移植&#xff0c;已经初步掌握了开发板系统搭建的过程&#xff0c;在STM32MP157上搭建了自己的简单开发系统&#xff0c;从这一篇笔记开始就可以证实Linux驱动开发的学习了&#xff01;之后的正点原子…

VBA之正则表达式(43)-- 从网页中提取指定数据

实例需求&#xff1a;由网页中提取下图中颜色标记部分内容&#xff0c;网页中其他部分与此三行格式相同。 方法1 Sub Demo()Dim objRegex As ObjectDim inputString As StringDim objMatches As ObjectDim objMatch As ObjectSet objRegex CreateObject("VBScript.RegEx…

Drecom 的《Eternal Crypt - Wizardry BC -》加入 The Sandbox 啦!

经典 “Wizardry” 游戏系列的新区块链迭代将通过全球合作拓展 Web3 游戏宇宙。 我们非常高兴地宣布&#xff0c;沙盒游戏公司与富有远见的传奇游戏《Wizardry》系列创造者 Drecom 将建立充满活力的合作伙伴关系。我们将共同推出《Eternal Crypt - Wizardry BC -》&#xff0c…

260. 只出现一次的数字 III (中等,位运算)

还是不会做&#xff0c;思路来自官解 对于整个数组按异或求和&#xff0c;可以得到只出现一次的两个数的异或值&#xff0c;通过这个值我们可以知道这两个数哪一位是相同的&#xff0c;哪一位是不同的假设这两个数字最低的不同发生在第 l 位&#xff08;因为两个数字不同&…

网络安全 - 一名合格的Web安全工程师之成长路径

最近经常听到公司的招聘专员反馈应聘者简历“水分”太大&#xff0c;尤其是技术岗位&#xff0c;例如Web安全工程师&#xff0c;明明是初级阶段的菜鸟&#xff0c;就敢写资深Web安全工程师&#xff1b;在几个项目做一些基础打杂的工作&#xff0c;就敢写带过团队&#xff0c;项…

强制禁止,线程池不允许使用Executors创建

目录 一、线程池二、线程池不允许使用Executors创建三、这是为什么呢&#xff1f;四、下面通过一段代码&#xff0c;测试一下。五、线程池参数 大家好&#xff0c;我是哪吒。 一、线程池 在程序开发中&#xff0c;高并发场景越来越多&#xff0c;线程池首当其冲。 简单回顾一…

LVGL_基础控件线条line

LVGL_基础控件线条line 1、创建基础空间line&#xff08;只创建出来是没有东西显示的&#xff09; /* 创建一个 line 组件(对象)&#xff0c;他的父对象是活动屏幕对象 */ lv_obj_t * line lv_line_create(lv_scr_act());2、添加点&#xff0c;把这些点连成线 /* 设置一组…

文件路径操作

避开-转义字符 python文件路径导致的错误常常与“\”有关&#xff0c;因为在路径中的“\”常会被误认为转义字符。 所以在上述路径中&#xff0c;\table\name\rain中的\t,\n,\r都易被识别为转义字符。 解决的办法主要由以下三种&#xff1a; #1 前面加r表示不转义 pathr&quo…

南美厄瓜多尔市场最全分析开发攻略,收藏一篇就够了

2023年5月11日&#xff0c;中厄自由贸易协定签署&#xff0c;不仅标志着中国加强与拉美地区的经济合作&#xff0c;也为外贸人拓展市场提供了巨大的机会。厄瓜多尔是一个具有潜力的市场&#xff0c;其年轻的消费群体和较高的互联网普及率为外贸人提供了广阔的发展空间。今天来分…

网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了

网络安全工程师需要学什么&#xff1f;零基础怎么从入门到精通&#xff0c;看这一篇就够了 我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答。大多数的路线都是给了一个大概的框架&#xff0c;告诉你那些东西要考&#xff0c;以及建议了一个学习顺…

超高度近视+白内障,爱尔眼科周进院长助患者视界“焕新”

57岁的徐女士自幼就是高度近视并开始戴眼镜&#xff0c;且近视度数逐年增加&#xff0c;很快便发展成了2000多度的超高度近视&#xff0c;最终在爱尔眼科四川眼科周进院长的帮助下&#xff0c;一次手术同时解决了高度近视和白内障的问题&#xff0c;视力得以改善&#xff0c;50…

Notepad ++ 零基础入门到精通安装与配置教程(非常详细)

Notepad 获取与安装 —————————— Notepad 是什么 在运行中输入 notepad 会弹出来记事本&#xff1a; 所以 Notepad 就是增强的记事本&#xff01;这个跟 C 与 C 的名字是一样滴&#xff01; Notepad 是 Windows 操作系统下的一套文本编辑器 软件版权许可证 GPL有…

css 左右滚轮无缝衔接

最近的项目有做到一个功能 类似跑马灯或者公告栏那种 有文字 也有列表的 所以 写了两种 第一种公告栏文字是用的js 第二种图文类型是用的css 两种方法 记录一下 第一种 纯文字滚动 其实也是根据js去计算dom的宽度 通过js去给css赋值 <div class"div1"><div …

Python抽奖系统-----控制台显示

以下是一个 Python 抽奖系统&#xff0c;其中包含更多的功能&#xff0c;如添加参与者、多轮抽奖、保存获奖者名单等&#xff1a; import random import osdef load_participants():try:with open("participants.txt", "r") as file:participants file.r…

Makefile——Linux下C/C++编译方法

目录 1. C1.1 编译C1.2 创建静态库1.3 创建动态库 2. C3. Makefile3.1 变量3.2 常用函数3.3 makefile编译文件 1. C linux下常见的C语言项目相关的文件如下图所示。 1.1 编译C 通常使用GCC来编译C文件。编译过程为源文件.c文件 -> 预编译成.i文件 -> 编译成汇编语言.…

【mfc/VS2022】计图实验:绘图工具设计知识笔记2

按钮添加处理程序 1.类视图找到对应类右击&#xff0c;类向导 2. 找到对应的的按钮id 如何将画出的两个相交的圆都显示出来&#xff0c;而不是重叠&#xff08;如下图&#xff09;隐藏了一条圆弧 问题如图&#xff1a; 因为矩形和圆心其实是个背景色的封闭图形&#xff0c;所…

ggplot2 -- geom_linerange 函数的简单使用

brief 需要三个参数确定一个直线&#xff0c;x轴位置&#xff0c;y轴起始位置&#xff0c;y轴结束位置。 有别于一些垂直辅助线&#xff0c;可以实现柱状图&#xff0c;瓷砖图等等。 example 实现柱状图 library(tidyverse)tibble(theta seq(from 0, to 1, by .1),prio…

【一周安全资讯1014】交通运输部发布《公路工程设施支持自动驾驶技术指南》;多地网信办对违反数据安全法规企业作出行政处罚

要闻速览 1.交通运输部发布《公路工程设施支持自动驾驶技术指南》 2.数据泄漏被传输境外后擅自删库&#xff01;某科技公司被上海市网信办依法处罚 3.浙江省网信办对杭州某科技公司未履行数据安全保护义务依法作出行政处罚 4.超140亿元资金失窃&#xff1f;印度一支付网关服务…