3.6、linux调试器:gdb

个人主页:Lei宝啊 

愿所有美好如期而遇


背景

程序员在做项目写代码时,每完成一个功能,需要自己先测试·一下,看看能不能跑之类的,然后交给测试人员,但是测试人员就代表着用户,用户不需要调试,他们只需要最好的体验,所以程序员给测开人员的代码版本应该是release,而不是debug,但是程序员需要调试,所以程序的发布方式就有了两种,debug和release。·

Linux中,gcc和g++出来的二进制程序默认是release版本,我们需要使用gdb,那么就需要在源代码生成二进制程序时,加上-g选项。

使用

先导准备


 接下来开始使用gdb进行调试

我们进入调试后是看不见任何代码的,这对于我们来说是不可忍受的。

list 打印代码,我们实际使用时可以简写为l,后面加上空格和0时表示从头开始打印

 直接l就可能会像上图,可能与上次进入光标有关

 而且gdb自动记录最近的一条指令,我们输入l后,下一次直接回车,就相当于输入了list

代码是有了,我们可以开始调试,对应在

Visual Studio中,是F5

gdb中,我们输入run,简写为r

 由于我门并没有打断点,就直接执行完了。

那么如何打断点呢?

break 行号,简写为b 行号

info b查看断点 (info breakpoints),简写为i b

我们可以打断点了,那么如何执行语句往下走呢?

在Visual Studio中,我们有F10和F11,分别是逐语句和逐过程

gdb中,我们使用next和step,简写为n和s 

 我们先只使用next

 接下来使用step

直接r,然后y,就可以不退出重新调试

进入函数后,发现循环很长,如何跳过?

 until 行号 ,执行到行号所在行

或者干脆想退出函数

那就这样做

finish,执行到当前函数结束

我们的思路再重头来过介绍其他指令

打断点打在某个函数上

break 函数名,简写为b 函数名

 breakpoint already hit 1 time表示断点被命中。

我们能不能从一个断点执行到下一个断点呢?

continue 简写为c

我们发现断点的执行顺序不是按照序号的,而是按照代码的执行顺序。

那么接下来如何删除断点呢?

delete breakpoints删除所有断点,简写为d

delete breakpoints 断点序号 简写为d 序号

 如何禁用断点,如何启用断点?

disable breakpoints 断点序号,简写为disable b 序号,不可写成d b 序号(踩过坑了)

我们发现Enb那一栏由y变成了n,yes-->no

enable breakpoints 断点序号,启用断点 ,简写为enable b 序号,不可写成 e b 序号

接下来我们想到Visual Studio可是有监控窗口的,并且可以查看变量的值,gdb呢?

print,我们可以简写为p,意思是打印值,变量或者表达式的值。

 但是监视窗口一般是常显示,我们如何进行常显示?

display变量名,跟踪查看变量,并常显示。

undisplay变量名,取消对变量的跟踪。

 现在我们还有一个需求,在不退出调试的情况下修改变量的值

这里写错了,修改一下。

set var 变量,设置变量的值

bt,查看调用堆栈 

 

quit,退出gdb调试

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区块链链游合约系统开发项目模式技术方案

​随着区块链技术的发展,链游合约系统开发逐渐成为了一个备受关注的项目。本文将探讨区块链链游合约系统开发项目的技术方案,包括项目背景、开发目标、技术架构、系统流程、安全措施等方面的内容。 一、项目背景 链游是一种基于区块链技术的游戏&#xf…

压测必经之路,Jmeter分布式压测教程!

01、分布式压测原理 Jemter分布式压测是选择其中一台作为调度机(master),其他机器作为执行机(slave);当然一台机器也可以既做调度机,也做执行机。 调度机执行脚本的时候,master将会…

NFTScan | 11.06~11.12 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链,相关 NFT 地板价涨至 0.35 ETH 11 月 6 日,据 Coindesk 报道,美国时间周…

【算法与数据结构】491、LeetCode递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题和【算法与数据结构】78、90、LeetCode子集I, II中90.子集II问题有些类似,…

车载测试和软件测试有什么区别

车载测试和软件测试都是在汽车电子系统中进行的测试工作,但是它们之间有一些不同之处。 1. 测试对象不同:车载测试是在汽车电子系统中进行的测试工作,测试对象是整个车辆上的各种部件和系统的集成。而软件测试是针对汽车电子系统中的软件程序…

前端框架图谱

以上图谱基于个人经验总结,比如小程序、第三方平台等未在其中有所体现

【学习辅助】Axure手机时间管理APP原型,告别手机控番茄任务模板

作品概况 页面数量:共 30 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:时间管理、系统工具 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本品为「手机时间管理」APP原型,…

Django——路由层

一. 路由匹配 1. 路由匹配注意事项 urlpatterns [url(r^admin/, admin.site.urls),# 首页url(r^$,views.home),# 路由匹配url(r^test/$,views.test),url(r^testadd/$,views.testadd),# 尾页(了解): 后期使用异常捕获处理, 这样的尾页让django的第二次在路径中斜杠APPEND_SL…

【深度学习实验】网络优化与正则化(三):随机梯度下降的改进——Adam算法详解(Adam≈梯度方向优化Momentum+自适应学习率RMSprop)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正:动量法Momen…

excel中通过ROW函数返回引用的行号

例如,想引用B3的行号(行号应该是3): 鼠标点在想输入函数的单元格: 插入-》函数: 选择ROW函数: 点击“继续”,然后点击红框圈出来的按钮: 鼠标点击B3单元格&…

thinkphp8 多级控制器调用

在使用这个目录的时候正常访问时 http://tp.com/index.php/user2.login/index, 这个多级目录时不允许使用的,想要使用就的使用路由 在route/app.php 里面配置:Route::get(user2/login,user2.Login/index); 第一个参数时外部访问参数,第二个是…

AD教程 (十四)常见IC类封装的创建

AD教程 (十四)常见IC类封装的创建 新建IC类PCB封装,并双击命名 放置焊盘,从datasheet上找到对应焊盘大小 如下图,焊盘宽度为b,就是0.51mm,焊盘长度为(E1-E)/2&#xff0…

VB.net TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据

本 示例使用设备介绍:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) Imports System.Threading Imports System.Net Imports System.Net.Sockets Public Class Form1Dim ListenSocket As SocketDim Dict As New Dictionary(Of…

ultrascale+mpsoc系列的ZYNQ中DDR4参数设置说明

ultrascalempsoc系列的ZYNQ中DDR4参数设置说明 标题1 概述标题2 讲述平台标题3 ZYNQ的DDR设置界面参数标题4 DDR参数界面说明如下 标题1 概述 本文用于讲诉ultrascalempsoc系列中的ZYNQ的DDR4的参数设置与实际硬件中的DDR选型之间的关系,为FPGA设计人员探明道路。 …

云汇优想:抖音矩阵系统有哪些类型?

抖音作为中国最热门的短视频分享平台之一,不断推陈出新,在内容管理和展示方面也进行了创新。其中,抖音矩阵系统是一项重要的功能,它提供了多种类型的矩阵,帮助用户更好地管理和展示自己的内容。那么,抖音矩…

2011年11月10日 Go生态洞察:Go语言两周年纪念

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Outlook如何恢复已删除邮件

Outlook如何恢复已删除邮件 操作指引: Outlook客户端恢复最近7天删除的邮件: Outlook客户端要求最新版本,如没有如下选项,建议联机更新windows update 网页邮箱恢复最近7天删除的邮件:

Docker的安装配置与使用

1、docker安装与启动 首先你要保证虚拟机所在的盘要有至少20G的空间,因为docker开容器很吃空间的,其次是已经安装了yum依赖 yum install -y epel-release yum install docker-io # 安装docker配置文件 /etc/sysconfig/docker chkconfig docker on # 加…

NC65 客户、供应商、人员等基本信息校验唯一性规则的设置

NC65 客户、供应商、人员等基本信息校验唯一性规则的设置 供应商名称唯一校验,很容易导致重名的无法保存,那如何设置得如下图提示的按名称基本分类纳税人登记号等校验规则呢? 答:使用 admin 账号登录,然后在基础数据…

【unity2021.3.6f】运行官方 Vuforia Hololens 2 Sample 教程

文章目录 前言一、创建unity项目二、导入unity1.添加到我的资源2.在package Manage 里面去找到,点击下载,下载完成后点击Import 如下图:3.导入途中会有窗口弹出 很多提示,都点击默认选项:Import 、Install/Upgrade 等 …