Linux中gdb的使用

news2025/7/19 13:13:05

文章目录

  • gdb的使用方法
    • 启动gdb之前的准备工作
      • 下载gdb
      • 拥有一个带有调试信息的可执行程序
    • 正式启动gdb
    • 展示源码(要先看到源码才知道接下来的步骤……)
    • 打断点
    • 显示所有断点信息
    • 运行程序
    • 逐过程(VS中的F10)
    • 逐语句(VS中的F11)
    • 断点跳转(VS中的F5)
    • 显示变量名(暂时)
    • 显示变量内容(永久)
    • 取消显示永久变量内容
    • 删除断点
    • 禁用断点
    • 启用断点
    • 执行完该函数然后跳到下一步
    • 跳到某一行
    • 查看函数堆栈
    • 查看当前栈帧局部变量的值
    • 退出gdb

gdb是有GNU开源组织发布的一款软件,用于在unix/linux环境中使用命令行的方式进行调试程序的工具。

gdb的使用方法

启动gdb之前的准备工作

下载gdb

sudo yum install -y gdb

在输入完root密码之后,就会开始下载gdb,如果已经拥有gdb,则会出现以下提示。

image-20221222142205438

拥有一个带有调试信息的可执行程序

在启动gdb之前,必须要有一个拥有调试信息的可执行程序。

image-20221222141416331

如果对一个无调试信息的程序使用gdb,虽然会执行成功,但是会无法继续后面的动作(例如调试、打断点、step over等等)。同时注意一下会出现这样一句话。

截屏2022-12-22 14.16.28

正式启动gdb

注意:下面所有的操作对象,我用的是我的可调试可执行程序mybin

gdb mybin

在执行完后会出现很多内容,这些内容都是gdb的一些相关信息(版权、许可证等等),需要注意最后一句话,若出现这句话则表明可以正常使用gdb进行调试程序。

截屏2022-12-22 14.34.13

注意:中间的是我的程序mybin的绝对路径。

gdb -q mybin

执行这条命令则不会额外输出gdb的相关信息,但同样会输出上图红框内容。

image-20221222143348359

从最下面的(gdb)后面开始输入指令进行调试操作。

展示源码(要先看到源码才知道接下来的步骤……)

list 行号:若不显式写行号,则默认展示10行内容
list 函数名:若不显式写函数名,则默认从main函数开始展示内容
l 行号
l 函数名

执行l即可,l就是list

小技巧:gdb会默认记录上一次执行的命令,按enter会自动执行该命令(有些可以)。

image-20221222144048199

打断点

break 行号:在改行设置断点
break 函数名:在该函数的开头设置断点
b 行号
b 函数名

执行b即可,b就是break

image-20221222144423212

显示所有断点信息

info breakponits
info break
info b

image-20221222144606136

运行程序

run 
r

执行r即可,r就是run

image-20221222145121125

逐过程(VS中的F10)

next
n

执行n即可,n就是next

一句一句执行,但不进入函数内部。

image-20221222154726907

逐语句(VS中的F11)

step
s

执行s即可,s就是step

一句一句执行,能够进入函数内部。

image-20221222154828414

断点跳转(VS中的F5)

continue
c

执行c即可,c就是continue

image-20221222154516630

显示变量名(暂时)

p 变量名

image-20221222150607945

该方法只能显示一次变量名,不能够再执行程序的过程中持续显示。

显示变量内容(永久)

display 变量名

image-20221222150830043

能够在执行程序的过程中持续显示(但进入到其它函数中则不会显示,重新回来就继续显示)。

取消显示永久变量内容

undisplay 取消显示所有变量
undisplay n 取消显示序号为n的变量

在用display显示变量的时候,前面会有序号。

image-20221222152520140

删除断点

delete breakpoints 删除所有断点
delete break
delete breakpoints n 删除序号为n的断点
delete break n

image-20221222151753218

禁用断点

disable breakpoints 禁用所有断点
disable break
disable breakpoints n 禁用序号为n的断点
disable break n

截屏2022-12-22 15.20.22

启用断点

enable breakpoints 禁用所有断点
enable break
enable breakpoints n 禁用序号为n的断点
enable break n

执行完该函数然后跳到下一步

finish

当在一个函数调用中执行finish时,会自动把该函数执行完然后跳出函数到下一步停下。

image-20221222153208092

跳到某一行

until n 跳到n行

如果中间有断点,则会在断点处停下。

image-20221222153637251

查看函数堆栈

bt

image-20221222153947905

查看当前栈帧局部变量的值

info locals
i locals

image-20221222154151228

退出gdb

quit
q

image-20221222154254521

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

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

相关文章

实验四、格子世界(Grid World)

一、实验目的 (1)熟悉动态规划算法中策略评估过程; (2)了解如何对问题进行建模处理,包括环境、状态、动作、奖惩值的初始化; 二、实验内容与要求 (1)掌握动态算法基本…

华为机试_HJ27 查找兄弟单词【中等】

目录 描述 输入描述: 输出描述: 解题过程 提交代码 学习代码 代码一 收藏点 描述 定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字…

Linux系统 PHP安装expect扩展详解

今天继续给大家介绍服务器运维相关知识,本文主要内容是Linux系统 PHP安装expect扩展详解。 一、expect简介 expect是基于tcl语言开发的,用于实现自动和交互式任务进行通信,而无须人的干预。expect是建立在tcl基础上的一个工具,还…

Navicat--对比和同步MySQL表结构的方法

原文网址:Navicat--对比和同步MySQL表结构的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何使用Navicat对比和同步MySQL表结构的方法。 实际项目中会遇到这样的场景:将测试环境的表结构同步到生产环境。 工具> 结构同步 选择源数据库和目标数据…

tensorflow 基本概念和基本操作

op和tensor之间的关系 op是graph上的节点,线就是tensor。 op输入tensor,同时也产出下游的tensor 作为每一个tensor,都会有一个op的属性(attribute),该op就代表着这个tensor是被什么计算产出的。举个例子: In [74]: w…

Redis6 主从复制

Redis6 主从复制1. 什么是主从复制2. 能做什么3. 配置1主2从3.1 配置3.2 启动redis3.3 配置主从关系4.常见问题4.1 一主二仆5. 主从复制原理6. 薪火相传7. 反客为主1. 什么是主从复制 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制&#xff0c…

C++--数据结构--最短路径--Dijkstra--Bellman-Ford算法--Floyd-Warshall算法--高阶0713 14

注:本篇所用的某些未在本文中实现的函数,或不明确的类,均在上篇博客中有详细过程,因篇幅问题不再赘述。 C--数据结构--图的相关概念及模拟实现--高阶0712_Gaze!的博客-CSDN博客 1. Dijkstra算法 Dijkstra算法需要开辟…

spring-boot 接收form表单 多文件加多字段数据(postman在form-data格式下传数组和集合)

前言 该博客多用于记录自己的问题 在写项目的时候遇到这种业务情况: 需要保存整个页面的数据,数据包含多个字段信息和多个文件 结合网上的处理思路,我最终实现了这种业务需求并整理一下 前端单独提交字段和文件比较方便简单,本人…

带你读AI论文丨针对文字识别的多模态半监督方法

摘要:本文提出了一种针对文字识别的多模态半监督方法,具体来说,作者首先使用teacher-student网络进行半监督学习,然后在视觉、语义以及视觉和语义的融合特征上,都进行了一致性约束。本文分享自华为云社区《一种针对文字…

构建高性能内存队列:Disruptor

1、 背景 Java中有哪些队列 ArrayBlockingQueue 使用ReentrantLock LinkedBlockingQueue 使用ReentrantLock ConcurrentLinkedQueue 使用CAS 等等 我们清楚使用锁的性能比较低,尽量使用无锁设计。接下来就我们来认识下Disruptor。 2、Disruptor简单使用 github地…

Web3中文|可判115年监禁的FTX创始人SBF即将被引渡到美国

巴哈马总检察长办公室在宣布逮捕FTX前CEO Sam Bankman-Fried时,指出他很可能应美国要求被引渡。 一个多星期后,美国广播公司新闻报道称 ,SBF于12月20日签署了引渡文件。 另据彭博社12月20日的一份报告称,该交易所创始人SBF于12月…

Centos7安装配置Minio

Background 官方下载地址:https://github.com/minio/minio/releases 这里给出本次使用的一个版本:minio-2021-05-11T23:27:41Z,提取码:king 1、下载minio文件夹 其他的版本的相关命令可能发生变化,这里只是针对我提供…

基于GIS的生态安全格局构建之生态阻力面的建立

GIS前沿 一、数据来源介绍 (一)土地利用数据 土地利用数据来自国土资源三次调查数据(2018年),根据研究需要对其进行分析处理。 (二)生态安全等级数据 利用对从生态属性和生态干扰两方面选择的…

Junit5 + YAML 轻松实现参数化和数据驱动,让 App 自动化测试更高效(一)

登录:不同的用户名,不同的密码,不同的组合都需要做登录场景的测试,正常的排列组合下可能会产生多个用例 搜索:不同的搜索条件产生不同的搜索结果,搜索也是常见的测试项,单个搜索参数或者多种搜…

Java---正则表达式

目录 一、正则表达式的介绍 二、正则表达式的基本语法 (1)字符类 (2)预定义符 (3)数量词 三、正则表达式的具体实例 (1)判断电话号码是否符合规则 (2)…

git push踩坑记录【看注意事项】

记录一次git push的踩坑过程(详细在注意事项里,列出了具体的解决办法)。 push远程仓库命令 使用命令 git init git add . git commit -m "提交说明写在这里" git remote add origin gitgithub.com:xxx/surgical-robot.git git p…

4、常用类和对象

文章目录4、常用类和对象4.1 Object4.2 数组4.3 二维数组4.4 二维数组 九层妖塔4.5 冒泡排序4.6 选择排序4.7 二分法查找4.8 字符串4.9 字符串拼接4.10 字符串比较4.11 字符串截断4.12 字符串替换4.13 字符串大小写转换4.14 字符串查询4.15 StringBuilder4.16 包装类4.17 日期类…

windows环境下python和gdal绑定方法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 编译和安装gdal 此篇介绍的方法并不需要用到pip工具,可依据自己编译的gdal库来灵活绑定。 安装gdal主要是设置两个环境变量:一是gdal的动态库路径加入到path环境变量下,如下图: 二是…

vim的常规操作

Linux系统内置vi文本编辑器,vim是vi的增强版 vi和vim的三种模式 正常模式:默认模式,可以使用“上下左右”键来移动光标,也可以用删除、复制、粘体等功能插入模式:按i,I,o,O,a,A,r,R等任何一个字母进入命令行模式&…

django logging的StreamHandler的一个小用法

首先先了解下,logging的大致结构,它有一个内置处理器,还有一个django提供的内置记录器。基本上,日志模块就是由这俩组成的,他俩的关系,有点水渠理论的意思。就是说,处理器,和记录器&…