GDB的常用命令

news2024/9/23 21:18:08

GDB是一个调试程序,可以用来调试C/C++程序。这个C/C++要产生符号表才能使用GDB调用。例如C++:

g++ -g source.cpp

GDB常用命令

首先要生成一个有调试符号的ELF文件(exe curable and linkable format),简单点说就是一个带调试符号可执行文件。加-g参数进行编译。

hello.cpp:
请添加图片描述

──(kali㉿kali)-[~/dev/Bear]
└─$ g++ -o world -g hello.cpp
──(kali㉿kali)-[~/dev/Bear]
└─$ ls
world hello.cpp

启动gdb调试程序

──(kali㉿kali)-[~/dev/Bear]
└─$ gdb

为了方便我们调试,在开始调前运行layout next

这个命令将显示程序中当前位置周围的源代码。这个视图对那些刚接触gdb的人很有帮助,特别是在处理您不熟悉的源代码时。
在启动GDB后,第一次输入

(gdb) layout next

请添加图片描述
请添加图片描述
再重复执行 layout next,将显示汇编语言的程序。
请添加图片描述
layout prev这个命令就是回到上一个模式。

使用world文件作为调试,使用file文件来读入调试用的文件world的符号

使用file将用作调试的文件的符号载入

(gdb) file world
Reading symbols from world...

设置断点

断点在特定的行数:

(gdb) break 2
(gdb) break 7

也可以断点在函数上:

(gdb) break main

请添加图片描述

运行world程序

(gdb) run world

或传些一参数给world程序:

(gdb) run world "ling ling"

请添加图片描述

使用next命令运行到下一行

(gdb) next

如果遇到一个函数调用,想进去看看,就可以用step

(gdb) step

请添加图片描述

如果已进入函数,然后不想继续看了,想回到它被调用的地方,就可以用finish

(gdb) finish

如果要回到调用点,可以使用return命令:

请添加图片描述

使用print检查一些变量的值

请添加图片描述

除了使用print检查一些变量的值,还可以使用display,与print的不同的是它会在每条指令之后重新打印信息。

在这里插入图片描述

使用clear清掉断点

如清掉第7行的断点

(gdb) clear 7

请添加图片描述
或者清点某个方法名上的断点:

(gdb) clear main

请添加图片描述

bt显示函数调用堆栈,即自到达这一行以来运行过的每个函数,即显示函数调用栈。

(gdb) bt

请添加图片描述

continue命令用于从断点停止的地方继续继续,直到下一个断点。

(gdb) continue

frame [number] goes to the selected frame in the call stack.

使用list命令,打印当前源文件中当前行周围的区域。显示当前行和调用的函数堆栈请添加图片描述

quit或者exit都是gdb调试程序。

上面这些命令是用得比较普遍的。更高级的使用可以通过help命令来找到更多有用的信息

(gdb) help

请添加图片描述
通过help命令就可以了解更多高级应用。在此就不再展开了。gdb学习起来还是很容易的。

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

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

相关文章

client-go实战之八:更新资源时的冲突错误处理

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作client-go实战之二:RESTClientclient-go实战之三:Clientsetclient-go实战之四:…

matlab控制理论学习

一、求传递函数表达式residue() 1、极点不同的情况 分子和分母的矩阵分别为: >> num[2 5 3 6]; >> den[1 6 11 6]; 使用下列命令,即可对分式进行展开,展开后有多项,每一项的分子一定是数字,而分母则是一个…

mysql底层解析——连接层,包括连接、解析、缓存、引擎、存储等

1、 前言 打算写一个系列的文章,主要是mysql底层解析。 很多时候,程序员对mysql处于频繁使用,但都一知半解的程度,除了会加个索引,貌似也没啥优化的技能了。事实上,mysql能有今日的成就,必然不…

Selenium4新特性-关联定位策略

Selenium 4 引入了关联元素定位策略(Relative Locators)。这种方式主要是应对一些不好定位的元素,但是其周边相关联的元素比较好定位。实现步骤是先定位周边较容易定位的元素,再根据关联元素定位策略定位到想定位的那个元素。如下以具体案例讲解用法。 以…

UDS诊断系列介绍15-FIM模块功能介绍

本文框架1. 系列介绍1.1 FIM模块概述2. FIM相关概念2.1 FID概念2.2 FIM数据结构3. FIM模块作用过程4. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议,即统一的诊断服务,是面向整车所有ECU的一种诊断…

English Learning - L1-13 主动脉修饰 (上) 2023.1.16 周一

English Learning - L1-13 主动脉修饰 (上) 2023.1.16 周一11 主动脉修饰11.1 定语两大核心when 引导的定语从句where 引导的定语从句为什么有时关系词前会有介词到底用 which 还是用 that ?1. 先行词是 all, much, little, few, the one 等不定代词&a…

Java---微服务---SpringCloud(1)

SpringCloud011.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.微服务技术对比1.5.SpringCloud1.6.总结2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程2.3.实现远程调用案例2.3.1.案例需求:2.3.2.注册…

如何使用Facebook Insights提升SEO策略

搜索流量是所有网站都必须考虑的重要因素,但如何才能吸引到更多的访问者呢?我们都知道 Google的 SEO算法,那 Google针对搜索流量的算法有哪些?Facebook Insights (Facebook Search Engine Insight)是一款搜…

基于python个性化推荐购物系统的设计与实现

源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 一、开发工具及技术 Python3.6.8,Django3,mysql8,navicat数据库管理工具,html页面,javascript脚本,jquery脚本,bootstrap…

从零实现一个组件库(一)项目环境搭建

文章目录前言monorepo架构1.monorepo架构的优势2.使用pnpm搭建monorepo架构(1)全局安装pnpm(2)初始化项目(3)新建workspace.yaml文件4.不同包之间的相互引用TypeScript支持1.安装TypeScript2.初始化TypeScr…

6、工程和模块管理

文章目录6、工程和模块管理6.1 IDEA 项目结构6.2 Project和Modoule的概念6.3 创建模块6.4 删除模块6.5 导入别人的模块6.6 当导入的模块字符集问题,导致中文乱码6.7 同时打开两个IDEA项目工程1 新建一个IDEA项目2 两个IDEA项目工程效果3 打开两个IDEA项目【尚硅谷】…

Kubernetes:开源 K8s 管理工具 Rancher 认知

写在前面 博文内容涉及Rancher 的介绍,集群内安装查看 Rancher 的基本功能理解不足小伙伴帮忙指正 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼黑塞《德米安》 Rancher 介绍 Rancher 是一个 Kubernetes 管…

计算机基础——python数据结构之顺序表和链表

计算机基础——数据结构概述数据结构算法时间复杂度python的代码执行时间测量模块线性表顺序表顺序表的连续存储顺序表的两种基本实现方式链表单向链表顺序表和单链表的对比双向链表单向循环链表概述 数据是信息的载体,是描述客观师傅属性的数、字符以及所有能输入…

抖音小黄车挂淘宝店相关问题记录

不开淘宝店,但作为技术被客户问起来,总得知道个一二,今天研究了一下,大致情况如下: 抖音绑定淘宝推广id 大致流程就是抖音开通橱窗,橱窗和淘宝挂钩,淘宝商品引入橱窗。 首先要满足抖音要求&a…

AlmaLinux 9 安装Oracle GraalVM Enterprise Edition 21.3.x

今天我们尝试一下在AlmaLinux 9 安装Oracle GraalVM Enterprise Edition 21.3.x。 GraalVM Enterprise 21 是一个 Long-Term-Support (LTS) 版本。 注意:下载Oracle GraalVM Enterprise Edition需要有Oracle账户,如果没有,可以通过访问创建您…

【SpringCloud】Nacos注册中心、配置中心用法与原理(上)

【SpringCloud】Nacos注册中心、配置中心用法与原理(上) 一、Nacos注册中心 1. 安装Nacos 【BUG】请注意Nacos2.0版本与1.0版本是有差别的! 2. Nacos的服务注册使用样例 (1)引入依赖 (2)配…

PowerShell 学习笔记

一、PowerShell 强大之处使用方便面向对象使用.net平台功能兼容性好(兼容CMD等)可扩展性好二、快捷键Tab:自动补齐命令或者文件名三、管道和重定向管道:上条命令的输出作为下一条命令的输入举例如下:列出当前目录ls结果…

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(四)

第七章 实战项目提升,完善简历 19.OV7725摄像头实时采集送HDMI显示(四) 在介绍完OV7725初始化配置和视频采集模块后,就到了整个项目的核心部分即DDR3乒乓存储图像模块,为了实现整个FPGA项目工程当中良好的实时性&…

会议论文分享-FSE20-基于学习的状态修剪策略

基于学习的状态修剪策略1.引言2.Homi算法2.1.概率修剪策略2.2.Homi2.2.1.Collecting Promising Data2.2.2.Generating Features.2.2.3.Learning Distribution2.2.4.Sampling Values2.2.5.总结3.实验3.1.实验设置3.2.有效性3.3.候选状态数量3.4.与朴素方法的对比4.代码实操4.1.代…

5、IDEA详细配置

文章目录5、IDEA详细配置5.1 如果打开详细设置界面5.2 系统设置1 默认启动项目配置2 取消自动更新5.3 设置整体主题1 选择主题2 设置菜单和窗口字体大小3 设置IDEA背景图5.4 设置编辑器主题样式1 编辑器主题2 字体大小3 注释的字体颜色5.5 显示行号与方法分隔符5.6 代码智能提示…