【Linux调试器gdb的使用】gdb的常用命令

2023-09-18 10:56:58

目录

一.前言

二.debug和release

三.常用命令

1.查看代码

2.更改显示的代码行数 

3.开始调试 

4.设置断点

5.代码执行

6. 查看变量

7.更改变量的值


一.前言

LInux系统下调试代码用到的工具是gdb,命令行的形式,肯定没有VS的调试器好用,毕竟人家是图形化界面非常灵活,而gdb还要输入命令。但gdb也算是Linux系统下为数不多的好用的调试器了,gdb的命令有很多,但只需掌握常用的几个够用就行了。

二.debug和release

一份代码有两种编译模式,debug和release,debug模式生成的可执行程序中包含调试信息,而release中不包含。

所以release版的可执行程序比debug版要小,给用户使用的也是release版,另外,release模式在编译时编译器还会做一些优化,所以有时候一个程序的debug版没有问题,但release却有问题,是因为编译器的自作聪明,好心办了坏事。

编译器gcc/g++默认使用release模式编译代码

但release版是没有调试信息的,当执行以下命令时

gdb mybin   (mybin是gcc用编译形成的可执行程序)

要想调试,必须得到debug版的可执行程序

gcc code.c -o mybin -g

-g选项表示用debug模式编译代码

三.常用命令

1.查看代码

用gdb打开可执行程序,源代码没有显示出来

可以使用如下命令查看代码

l(list) 10

功能:查看第10行的源代码

l function 

功能:查看指定函数的源代码(全局搜索,可不指定文件)

l file:10 

功能:查看第file文件的第10行的代码

2.更改显示的代码行数 

set listsize 20

功能:把每次显示源代码的行数改为20行(默认是10行)

3.开始调试 

 r(run)

功能:开始调试,遇到断点就停下,如果没有断点,直接跑完程序

4.设置断点

b(break) 10

功能:在第10行设置一个断点

b file:10

功能:在file文件的第10行设置一个断点

b func

功能:在fun行数的入口处设置一个断点(全局搜索,可不指定文件)

info b 

功能:查看断点信息

d(delete) num   (num是断点的编号) 

功能:删除断点(d后面只能跟断点的编号,不能是行号和函数名)

disable num  (num是断点编号) 

功能:禁用断点

 

enable num  (num是断点编号)

功能:启用断点

 

5.代码执行

n

功能:逐过程,相当于VS的F10

s

功能:逐语句,相当于VS的F11 

 c(continue)

功能:运行到下一个断点处停下

 until  10

功能:运行到第10行停下

 finish

功能:运行完当前函数就停下

 

6. 查看变量

p  n

功能:显示变量n的值

display  n

功能:长期显示变量n的值 

undisplay  num  (num是长显示变量的编号)

功能 :取消长期显示变量n的值 

info i

功能:查看当前的局部变量的值 

bt

功能:查看调用堆栈 

7.更改变量的值

set var i = num

功能:把变量i的值更改为num 

更多推荐

特殊时间(蓝桥杯)

特殊时间问题描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。2022年2月22日22:20是一个很有意义的时间,年份为2022,由3个2和1个0组成,如果将月和日写成4位,为0222,也是由3个2和1个0组成,如果将时间中的时和分写成4位,还是由3个2和1个0组成。小蓝对这样的时间很感兴趣,

【 Ubuntu】systemd服务自启

要在Ubuntu启动后执行一个守护脚本,您可以使用Shell脚本编写一个systemd服务单元。systemd是Ubuntu中常用的服务管理工具,可以在系统启动时自动启动和管理服务。下面是一个示例的守护脚本和systemd服务单元的步骤:创建守护脚本:创建一个Shell脚本文件,例如mydaemon.sh,并在其中编写

markdown学习笔记

markdown学习笔记1.文字(依靠HTML)1.1文字缩进-空格转义符单字符空:&emsp;半字符空:&ensp;1.2文字对齐「居中:」<center>居中</center>or<palign="center">居中</p>「左对齐:」<palign="left">左对齐</p>「右对齐:」<palign="ri

VUE build:gulp打包:测试、正式环境

目录项目结构GulpVUE使用GulpVue安装GulpVue定义Gulp.jspackage.jsonbuild文件夹config文件夹static-config文件夹项目结构GulpGulp是一个自动化构建工具,可以帮助前端开发者通过自动化任务来管理工作流程。Gulp使用Node.js的代码编写,可以更加灵活地管理

STM32 基础学习——GPIO位结构(江科大老师教程)

一、GPIO内部结构1、GPIO外设名称是由GPIOA、GPIOB、GPIOC等命名,共有16个引脚2、每个GPIO模块内,主要包含了寄存器和驱动器这些东西3、寄存器写1,对应的端口就是高电平。写0,对应的端口就是低电平4、寄存器只负责存储数据这是GPIO结构图,总体来说上半部分是输入部分,下半部分是输出部分这是部分是

Bartender for Mac菜单栏图标自定义

Bartender是一款可以帮助用户更好地管理和组织菜单栏图标的macOS软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。以下是Bartender的主要特点:菜单栏图标隐藏:Bartender允许用户隐藏菜单栏图标,只在需要时显示。这样可以减少菜单栏的拥挤和视觉干扰,使界面更加整洁和专注。可自定义的菜单栏

Layui快速入门之第九节 表格事件的使用

目录一:事件二:头部工具栏事件三:排序切换事件四:列拖拽宽度后的事件五:列筛选(显示或隐藏)后的事件六:行单击和双击事件七:行右键菜单事件八:单元格编辑事件九:单元格工具事件十:复选框事件十一:单选框事件十二:尾部分页栏事件一:事件table.on('event(filter)',callback);参数event(f

Spring后处理器-BeanPostProcessor

Spring后处理器-BeanPostProcessorBean被实例化后,到最终缓存到名为singletonObjects单例池之前,中间会经过bean的初始化过程((该后处理器的执行时机)),例如:属性的填充、初始化方法init的执行等,其中有一个对外拓展的点BeanPostProcessor,我们称之为bean后

2D游戏开发和3D游戏开发有什么不同?

2D游戏开发和3D游戏开发是两种不同类型的游戏制作方法,它们之间有一些显著的区别:1.图形和视觉效果:2D游戏开发:2D游戏通常使用二维图形,游戏世界和角色通常在一个平面上显示。这种类型的游戏具有平面的外观,就像经典的平台游戏,如《超级马里奥》或《糖果传奇》。3D游戏开发:3D游戏使用三维图形,玩家可以在三维环境中自由

MySQL学习系列(3)-每天学习10个知识

目录1.全文搜索(Full-TextSearch)vs.LIKE操作符2.MySQL中的大数据量处理3.分区(Partitioning)在MySQL中的作用和用法4.MySQL中的数据复制(Replication)5.索引的覆盖和索引下推6.预处理语句(PreparedStatements)7.视图和存储过程8.MyS

C语言知识阶段性总结项目:电子词典

项目需求使用TCP实现客户端和服务端通信使用sqlite存放用户信息客户端需要有登录、注册、查询单词、账号查询记录功能服务器需要实时显示在线用户解决方案使用sqlite创建三个数据库,分别存放用户账号密码,单词表,用户查询记录使用链表存放在线用户的信息,在子线程中循环遍历,达到实时显示在线用户的效果主要的功能代码头文件

热文推荐