网站模板 酒类,顺德水利和国土建设局网站,设计网站页面要多少钱,厦门 网站制作#x1f33b;个人主页#xff1a;路飞雪吖~ #x1f320;专栏#xff1a;Linux 目录 一、Linux调试器-gdb
#x1f31f;开始使用
#x1f320;小贴士#xff1a;
#x1f31f;gdb指令
#x1f320;小贴士#xff1a; ✨watch 监视
✨打条件断点 二、小程序----进…个人主页路飞雪吖~ 专栏Linux 目录 一、Linux调试器-gdb
开始使用
小贴士
gdb指令
小贴士 ✨watch 监视
✨打条件断点 二、小程序----进度条
知识储备 一、Linux调试器-gdb
开始使用 小贴士 1、要用gdb来进行调试前提条件是代码必须是debug发布的。 debug添加调试信息 release取消调试信息 2、gcc/g 编译程序时默认它采用的发布模式是release。 3、要使我们的程序用debug来发布需要我们在编译时加上 -g 。 语法 gdb [可执行程序]
退出 quit / ctrld gdb指令 小贴士 • gdb会记录最新的一条命令直接回车就是默认执行该命令 指令功能list / l 行号 显示可执行程序的源代码 默认查看的代码行号处于展现代码的中间部分共展现10行 list / l 函数名列出某个函数的源代码r或run运行程序F5break(b) 行号在某一行设置断点 break 函数名 在某个函数开头设置断点info break查看断点信息d 断点编号删除断点disable breakpoints禁用断点enable breakpoints启用断点n 或 next (F10)代码从断点处单条执行逐过程不进入函数内部s或step (F11)进入函数调用display [要查看的内容]常显示具体信息循环中 i 的值地址.....undisplay [对应的编号]去掉显示的内容 p [变量] p [表达式] 打印指定变量的值until [次数]跳转到当前函数的内部的任意一行处
给指定文件打断点 --- b [文件名]行号/函数名 在我们一个调试周期下断点的编号时递增的。 断点禁用 断点被使用 n 逐过程不进入函数里面 进入函数内部后查看详细的信息 查看相关内容
指定循环次数
从上面就可以看出gdb的调试不方便查看代码为此我们来介绍一个工具 小贴士 在终端下/命令行中进行调试的工具 工具 cgdb 让代码进行可视化 安装 sudo yum install -y cgdb 使用 cgdb [可执行程序] 调试的本质----找到问题--- 解决bug 快速定位问题 断点 finish until continue 对大的代码块进行区间debug 指令功能continue / c从一个断点直接运行到下一个断点finish把现在所处函数的代码跑完(以函数级别进行运行)info locals显示临时变量的信息set var 变量值 修改变量的值 (set var i 10) 可以让我们在发现问题时当场改变值来验证答案预修订再出去修正代码。 b 行号/文件名 if i30 condition 2 i30 打条件断点 1、新增 2、给已有断点追加 ✨watch 监视
即专门针对某个变量的断点。 ✨打条件断点
1、新增断点 2、给已有断点追加 二、小程序----进度条 知识储备 1 回车和换行 回车\r本质是让光标回归到当前行的最开始。 换行\n直接从当前行跳转到下一行光标在上一行对下来的位置 在平时我们都会以为这两个使用是一样的其实不然新起一行的本质先回车再换行 2 缓冲区 虽然程序是在两秒之后才打印出来“hello Linux!!!”但是文件是先执行printf再执行sleep原因是什么呢 在程序执行sleep 2秒期间“hello Linux”字符串在哪里 它会保存在由C语言提供的输出缓冲区中。 3 有趣的小程序 当 \n 换成 \r 会有什么效果 如何输出内容 强制缓冲区的内容输出 当我们倒计时从 10 开始时就会出现一点问题这是为什么呢 我们思考一下我们给显示器输出的是一个整数1234还是打印了一个1 2 3 4 字符让我们以为打印的是一个整数我们需要知道的是显示器是没有类型的概念的显示器只认识一个一个的字符类型只有语言上有其实 “ printf(%d\n,a) ” 就是把整数1234格式化输出转化为“1” “2” “3” “4” 依次显示出来。 所以为什么上面程序为什么会多出一个 “0” 也就能理解了以为从 10 开始我们输出的是 “1” “0” 紧接着要输出 “9” 时光标回车到了最开始只覆盖住了 “1” “0” 一直都在所以我们需要修改输出的格式 printf(%-2d\n,countt) ; 正片开始 进度条~
先创建所需的文件模拟实现进度条的效果 //process.c#include process.h
#include stdio.h
#include string.h
#include unistd.h
#include string.h#define NUM 101
#define STYLE // version 1
void Process(){const char *lable |/-\\;int len strlen(lable);char bar[NUM];memset(bar,\0,sizeof(bar));int cnt0;while(cnt 100){ printf([%-100s][%d%%][%c]\r,bar,cnt,lable[cnt%len]);fflush(stdout); bar[cnt] STYLE;cnt; if(cnt NUM) { bar[cnt-1] \0; break;}bar[cnt] ;//sleep(1);usleep(50000);}printf(\r\n);}效果图 加强进度条模拟下载回调 如若对你有帮助记得关注、收藏、点赞哦您的支持使我最大的动力
若有误望各位在评论区留言或者私信我 指点迷津谢谢^ ^ ~