当前位置: 首页 > news >正文

Linux调试器

目录

gdp调试器

调试相关指令

l 行号

l函数名

s

break 行号

break 函数名

info break

finish

continue

until 行号

disable breakpoints

enable breakpoints

delete breakpoints

delete breakpoints n

display 变量名

undisplay 序号

p变量

quit


前面两期我们已经学写了vim编辑器和gcc编译器,这两个工具完成了对代码的编写和编译,今天我们要学习的就是gdb工具,它完成的是对代码的调试,调试在我们日常的编码中也是十分重要的,所以学好调试,是每一个程序猿的必修课。

gdp调试器

在使用gcc编译器编译完了代码之后,我们就要使用gdb调试器进行代码的调试,gdb的调试和vs中的调试有许多的相似之处。那么在linux中,我们如何使用gdb调试器进行调试呢?我们可以直接给gcc编译之后的代码进行调试吗?我们通过代码验证一下: 

上述代码为调试一个可执行程序的代码。 

我们发现,系统给了我们提示,说mytest这个可执行程序没有debug信息,所以我们直接给出结论,一个可执行程序要可以被调试,就必须含有debug信息。那么如果给可执行程序添加debug信息呢?代码如下:

我们通过如图2处的代码为mytest加上debug信息,通过1,3不难发现,添加玩debug信息之后,可执行程序前后的内存大小有了变化,加上debug信息之后可执行程序内存变大了一些。

调试相关指令

l 行号

l 行号:如果给定了行号,就从给定行号位置开始往下展开源代码,一次展开10行。

l函数名

l函数名:列出当前函数的源代码。 

r:运行可执行程序。 

n:单条执行,不进入函数调用,类似与vs中的F10。

s

s:进入函数调用。类似与vs中的F11。

break 行号

break 行号:为当前行设置断点。

break 函数名

break 函数名:为当前函数设置断点。

info break

info break:查看断点信息。

finish

finish:与s对应,调试完当前函数之后,直接停止调试。

continue

continue:调试完当前函数之后,继续进行调试,知道遇到下一个断点,停止调试,如果之后没有断点,则调试至程序结束。

until 行号

until 行号:比如说我们知道了某一个函数的几部分代码是不可能产生问题的,假如这个函数里面是个循环,如果一步步的进行调试最终结束调试,非常消耗时间,所以可以直接使用until直接跳转到指定行。

disable breakpoints

disable breakpoints:禁用断点,只是不想让断点起作用,不想删除断点。

enable breakpoints

enable breakpoints:启用断点 。

delete breakpoints

delete breakpoints:删除所有断点。

delete breakpoints n

delete breakpoints n:删除序号为n的断点。

注意:这里删除的也是断点前的序号,而不是断点所处的行号。 

display 变量名

display 变量名:跟踪查看某一个变量的值,每一次停止调试都查看这个变量。

undisplay 序号

undisplay 序号:取消对当前变量的跟踪。

取消跟踪前:

取消跟踪代码:

注意:undisplay后跟的是跟踪变量前所显示的1,2,3序号,而不是变量名称,这点需要注意。 

取消跟踪之后:

 

p变量

p变量:打印变量的值。

quit

quit:退出调试。

以上便是所有gdb调试相关的所有重点指令。

本期内容到此结束^_^ 

相关文章:

  • Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】
  • html星星点灯
  • vue 自定义网页图标 favicon.ico 和 网页标题
  • 日志系统一(elasticsearch+filebeat+logstash+kibana)
  • Leetcode 3002. Maximum Size of a Set After Removals
  • 【Verilog】期末复习——设计11011序列检测器电路
  • 关于ubuntu20.04(Linux)屏幕突然横屏的解决方案
  • 开源C语言库Melon:多线程治理
  • 《数据库概述》 第七章 数据库设计
  • 6.OpenResty系列之深入理解(二)
  • PHPStudy快速搭建网站并结合内网穿透远程访问本地站点
  • 添加一个编辑的小功能(PHP的Laravel)
  • 计算机创新协会冬令营——暴力枚举题目03
  • 063:vue中一维数组与三维数组联动,类似购物车增减
  • 查看Linux系统内存、CPU、磁盘使用率和详细信息
  • [NodeJS] 关于Buffer
  • avalon2.2的VM生成过程
  • centos安装java运行环境jdk+tomcat
  • express.js的介绍及使用
  • HTML5新特性总结
  • HTML-表单
  • JavaScript函数式编程(一)
  • Js基础知识(四) - js运行原理与机制
  • Node 版本管理
  • node入门
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue小说阅读器(仿追书神器)
  • Zsh 开发指南(第十四篇 文件读写)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小程序button引导用户授权
  • 小程序开发之路(一)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #数学建模# 线性规划问题的Matlab求解
  • ${factoryList }后面有空格不影响
  • (6)添加vue-cookie
  • (day 12)JavaScript学习笔记(数组3)
  • (独孤九剑)--文件系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)【Hibernate总结系列】使用举例
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET/C# 项目如何优雅地设置条件编译符号?