Linux
1.版本控制器git
1.什么是git
我们在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个副本,文档如此,我们写的项目代码,也是存在这个问题的!为了能够更方便我们管理这些不同版本的文件,便有了版本控制器。
- 所谓的版本控制器,就是能让你了解到一个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业。
- 目前最主流的版本控制器就是Git。Git可以控制电脑上所有格式的文件,例如doc、excel、dwg、dgn、rvt等等。对于我们开发人员来说,Git最重要的就是可以帮助我们管理软件开发项目中的源代码文件!
2.安装git
yum install -y git
3.在gitee创建远端仓库
1
2
3
4
4.git clone
git clone 链接:将远端仓库拉取到本地
git在提交的时候,只会提交变化的部分(例如:写了100行代码,现在需要增加一行,只会提交新增加的那一行,恢复时只需要删除那一行)。若记录多份代码,则浪费空间。这些记录都在本地仓库.git中。
5.git三板斧
1.git add
git add 文件名:将工作区的文件添加到本地仓库中的暂存区
2.git commit
git commit -m "日志信息":将暂存区的文件提交到本地仓库
3.git push
git push:将本地仓库同步到远端仓库
4.总结:git的工作流程
- 工作区:开发人员在这里编写和修改代码。
- 暂存区:使用 git add 命令将工作区的修改添加到暂存区。
- 本地仓库:使用 git commit 命令将暂存区的修改提交到本地仓库。
- 远程仓库:使用 git push 命令将本地仓库的修改推送到远程仓库,以便与其他开发人员共享。
6.隐藏文件.gitignore
.gitignore:需要忽略特定后缀的文件列表,这些文件不会被 git 管理,也就是三板斧后不会上传到本地仓库,更不会同步到远端仓库。
git 版本管理:只进行管理源文件和头文件
7.git在Windows中的操作
首先要下载小乌龟TortoiseGit
1.git pull 解决冲突问题
git pull:将远端仓库同步到本地仓库,解决本地仓库和远端仓库不用时,同步到远端仓库被拒绝的问题。
总结:
- 远端仓库,相比较于任何人,都是最新的。
- 为什么要冲突?提醒本地用户,你要和远端仓库进行同步。
2.调试器gdb/cgdb
1.debug与release
2.修改gcc/g++为debug模式
gcc -c test.c -o test.o -g:编译后形成的目标文件,添加调试信息
总结:
- 程序要调试,必须是 debug 模式!也就是编译时要加上
-g
选项。 - 可执行程序必须要携带调式信息,否则编译器 gdb 无法正常工作。
3.快速认识gdb/cgdb
下载 gdb
sudo yum install -y gdb
测试代码
//test.c源文件#include<stdio.h>intSum(int s,int e){int result =0;for(int i = s; i <= e; i++){
result += i;}return result;}intmain(){int start =1;int end =100;printf("I will begin\n");int n =Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return0;}
上面的调试还是麻烦,虽然是黑屏,但是还是想看到要调试的代码,推荐安装:cgdb
#Ubuntusudoapt-getinstall -y cgdb
#Centossudo yum install -y cgdb
安装效果如下:比 gdb 效果还是要好一些
注意:gdb/cgdb后面跟的必须是可执行程序,而不是源文件。
4.gdb命令
这里gdb 和 cgdb 的命令都是一样的。
1. 开始: gdb/cgdb 可执行程序
2. 退出: ctrl + d /quit
命令作用样例
list/l 行号
从第 n 行开始显示源代码,每次列出10行
l 5
list/l 函数名
列出指定函数的源代码
l main
list/l 文件名:行号
列出指定文件,从第 n 行开始的源代码
l test.c:5
break/b 行号
在指定行数设置断点
b 5
break/b 函数名
在函数开头设置断点
b main
break/b 文件名:行号
在该文件的指定行数设置断点
b test.c:5
info/i break/b
查看当前所有断点的信息
i b
delete/d
删除所有断点
d
delete/d 断点序号
删除该序号的断点
d 1
disable 断点序号
禁用所有断点
disable 1
enable 断点序号
启用所有断点
enable 1
run/r
开始执行程序。无断点时程序执行完,有断点时执行到断点处
r
continue/c
运行到下一个断点处
c
until/u 行号
运行到指定行号
u 5
next/n
单步执行,不进入函数内部,类似:
逐过程F10
n
step/s
单步执行,进入函数内部,类似:
逐语句F11
s
finish
执行完当前函数返回,停止
finish
backtrace/bt
观察函数栈帧
bt
print/p 变量名
打印指定变量的值,暂时
p start
print/p 表达式
打印指定表达式的值,暂时
p start + end
display 变量名
跟踪显示指定变量的值(长时间显示)
display x
undisplay 序号
取消对指定编号变量的跟踪显示
undisplay 1
info/i locals
查看当前栈帧的局部变量
i locals
quit
退出 gdb 调试器
quit
设置与删除断点、启用与禁用断电:
5.函数返回值与寄存器?
6.调试的技巧
- 断点的本质:将代码进行块级别的划分,以块为单位进行快速定位区域!
- finish:运行完该函数,确认问题是否在函数内。
- until 行号:运行到指定行号,局部区域快速执行。
- continue/c:运行到下一个断点处,局部区域快速执行。
- gdb 会自动记录上一条输入指令。也就是说什么都不输入的话,直接按回车,就是执行上一条输入指令。
- gdb 分屏操作:输入 Esc 进入代码屏,输入 i 回到 gdb 屏。
1.watch
- 执行时监视一个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,gdb 会暂停程序的执行,并通知使用者。
- 如果你有一些变量不应该修改,但是你怀疑它修改导致了问题,你可以 watch 它,如果变化了,就会通知你。
2.set var
修改变量的值:暂时不需要修改源代码,可以确定错误的原因。
3.条件断点
1.添加条件断点
2.已存在的断点新增条件
注意:
- 添加条件断点:b 行号 if 条件(例如:b 7 if i == 10)
- 已有的断点,新增条件:condition 断点编号 条件(例如:condition 1 i == 10)
版权归原作者 清风~徐~来 所有, 如有侵权,请联系我们删除。