目录
1.\r&&\n
2.缓冲区
3.做一个Linux的小程序——进度条
1.makefile代码:
2.proc.h代码
3.proc.c代码
4.main.c代码
4.git(上传做好的小程序)
5.Linux调试器-gdb使用
在Linux中,可以将\r看成将光标移动到光标所在行的最左侧(回车)
\n看成换行,是换到下一行
凡是向显示器打印的所有内容,都是字符
myprocess:main.c proc.c
gcc -o myprocess main.c proc.c
.PHONY:clean
clean:
rm -f myprocess
#pragma once
#include
extern void process();
#include "proc.h"
#include
#include
#define SIZE 102
#define STYLE '='
#define ARR '>'
// "|/-\\"
void process()
{
const char *lable = "|/-\\";
char bar[SIZE];
memset(bar, '\0', sizeof(bar));
int i = 0;
while( i <= 100 )
{
printf("[\033[42;32;31m%-100s\033[0m][%d%%][%c]\r", bar, i, lable[i%4]);
fflush(stdout);//刷新显示器
bar[i++] = STYLE;
if(i != 100) bar[i] = ARR;
usleep(100000);
}
printf("\n");
}
#include "proc.h"
int main()
{
process();
return 0;
}
git的使用流程
1.git clone +gitee的仓库http地址——将远端的git仓库克隆到本地的Linux中
2.cp “想要上传的代码” 本地的gitee仓库 ——将本地的想要上传的代码复制到本地的gitee仓库里面
3.git add (-A). ——将本地的gitee仓库add(.代表的是本地的仓库)
3.git commit -m “xxxxxx”——m后面填写的是本次上传代码的备注信息
4.git push——推送到远端的gitee仓库里面
gcc和g++形成的可执行程序是release版本的,不是debug版本的
加上-g选项,gcc和g++会以debug版本进行编译程序,生成的可执行程序是debug版本的,这样才能用gdb调试
gdb主要掌握的是单进程调试功能,也就是在vs2019下怎么调试,就应该明白在gdb下如何调试
gdb使用流程
1.gdb “可执行程序”——用gdb打开可执行程序(debug版本)
2.l(list) 0——从第0行开始看代码,后续输入l+回车(不断回车),代码会自动往下翻滚(显示对应的代码)
3.r(run)——运行程序
4.b 行号——在某一行打断点
5.info b——查看断点(重点查看断点的首尾信息)
6.r——运行程序,此时程序在断点处停下
7.info b 此时可以发现断点已经被命中一次了
8.d 断点编号——删除断点
9.info b——此时已经没有断点了
10.r——运行程序,此时会询问你是否要重新开始调试
11.disable breakpoint 断点编号——禁用断点(将断点使能信号暂时关闭)
12.enable breakpoint 断点编号——开启被禁用的断点(与11条是一对)
13.逐语句(进入函数,一条条的跑完代码)逐过程(以函数为单位,但是不进入函数,跑完代码)调试方法:
1.n:逐过程
2.s:逐语句
3.p 变量——打印变量的值
4.display 变量名——常显示变量(可以是内置类型,也可以是结构体等自定义类型)的值(类似与vs2019的监视)
5.undisplay 变量编号——取消看常显示变量的值
6.until X行号:运行到第X行停下来
PS:
所有的调试器只是一个可以找出问题问题的工具,不能帮我们解决问题代码,真正能解决问题代码的只有我们自己。
所有查看代码内容的指令,并不影响我们调试的指令,比如:有的时候代码太多了,看不过来,我们用l去看自己想看的代码段,这种查看内容的l指令并不影响我们调试的位置。
14.finish——进入一个函数后,按下finish,就会只执行完该函数后,停下来
15.c(continue):从一个断点处,直接运行到下一个断点处
常用的gdb调试按键
进入调试:gdb binFile
退出: ctrl + d 或 quit
调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行(逐过程执行)。
s或step:进入函数调用(逐语句执行)
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值(这个调试指令用的很少)
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号(断点的编号)为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb