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

LINUX——调试器gdb/cgdb的使用

目录

引入

常见使用

watch(监视)

set var确定问题原因

条件断点

添加条件断点

给已经存在的断点新增条件


引入

样例代码

 #include<stdio.h>int total(int s,int e){int result=0;int i=0;                                                                                                                                                                                                   for(i=s;i<e;i++){result+=i;}return result;}int main(){int start=1;int end=100;int n=total(start,end);printf("result is %d\n",n);return 0;}
  • 我们知道,程序的发布形式有两种,即:debug模式和release模式,linux下gcc/g++出来的二进制程序,默认是release模式。
  • 要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项,如果没有添加,程序就无法被编译。

常见使用

开始:gdb 文件名

退出:ctrl+d 或者 quit调试命令

命令(简写)作用样例
l显示源代码,从上次位置开始,每次列出10行
l 函数名列出指定函数的源代码
l 行号把这个行号以及周围的代码显示出来,一共10行,此行号在中间
r/run从程序开始连续执行
n/next单步执行,不进入函数内部,相当于vs2022的F10
s/step单步执行,进入函数的内部,相当于vs2022的F11
b/break 行号在指定行号设置断点
info b/break查看当前所有断点的信息
finish执行到当前函数返回,然后停止
p/print 表达式打印表达式的值
p/print 变量打印变量的值
set var 变量=值修改变量的值
c/continue从当前位置开始来连续执行程序
d/delete breakpoints删除所有的断点
d/delete breakpoints n删除序号为n的断点
disable breakpoints禁⽤所有断点
enable breakpoints启⽤所有断点
info/i breakpoints查看当前设置的断点列表
display 变量名跟踪显⽰指定变量的值
undisplay 编号取消对指定编号的变量的跟踪显⽰
until X ⾏号执⾏到指定⾏号
q/quit退出GDB调试器

watch(监视)

执行时监视一个表达式的值。如果监视的表达式在程序运行期间的值发生变化,gdb会暂停程序的执行,并通知使用者。

  • 如果有一些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它!
  • 使用watch可以监视一个表达式在程序运行期间值的变化。

set var确定问题原因

#include<stdio.h>int total(int s,int e){int flag=0;//这里故意写错,模拟一下错误的场景int result=0;int i=0;                                                                                                                                                                                                   for(i=s;i<e;i++){result+=i;}return result*flag;}int main(){int start=1;int end=100;int n=total(start,end);printf("result is %d\n",n);return 0;}

经过一系列的排查我们发现可能是return result*flag 这里出错了!

这是我们就可以使用set var更改flag的值,确认是不是它的问题!!

发现真的是它的问题,但是注意,我们的源代码并没有被改变!!这样更加方便,不用改变源代码,就可以改变flag的值进行试错。

条件断点

添加条件断点

b 行号 if x==xx

给已经存在的断点新增条件

condition 断点号 x==xx

http://www.dtcms.com/a/462654.html

相关文章:

  • GIS实战:投影变换教程与问题解答(上)
  • 项目(3) - LVGL 图形用户界面(GUI)库
  • 长春专业网站推广给我高清电影
  • Redis07-面试题
  • 甘肃省建设社厅网站电商要怎么做起来
  • 做软件常用的网站四川建筑职业技术学院教务网
  • 公司营业执照可以做几个网站微信小程序怎么制作自己的程序
  • 磁悬浮轴承的“眼睛”与“神经”:位移传感原理深度解析
  • Linux小课堂: 从TTY到图形化终端的完整解析
  • 网站带后台免费下载搜图片找原图
  • 网站怎么快速收录wordpress 文件 钩子
  • 互联网科技公司做网站哪家好农场游戏系统开发 网站建设推广
  • PyTorch 模型部署实战:用 Flask 搭图像分类 API
  • 如何进行目的地网站建设东莞厚街创新科技职业学院
  • 网站标题修改重庆网站设计排名
  • 做图表用的网站做网站有什么工具
  • 温州做网站seophp网站开发就业前景
  • 问题记录:一个简单的字符串正则匹配算法引发的 CPU 告警
  • 公共数据资源的“整体授权”是什么涵义?
  • 如何增加网站关键词密度网站建设与维护网课
  • 建立门户网站的程序漳州企业网站建设制作
  • 汕头房产网站建设公司网站界面设计
  • [7-01-02].第05节:环境搭建 - 基础环境
  • BLIP模型
  • 网站建设添加资料搜索引擎优化seo什么意思
  • Playwright与Python:从入门到精通的完整指南
  • maven本地仓库有相应的依赖,依旧会从远程仓库拉取问题的原因及解决
  • 如何修改wordpress站景区旅游网站平台建设方案
  • 网站建设拾金手指下拉十九济南天桥区做网站的
  • 甘肃水利工程建设管理网站东省住房和城乡建设厅网站