在linux下提交代码同步到gitee
1.创建一个新的仓库(演示步骤)
2.init
这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱
开启本地仓库
克隆本地仓库成功
我们将这个仓库拷到了111目录底下.
我们发现少了一个.gitignore,因为.gitignore是隐藏文件,所以使用ls -la查看
3.git log 指令
用于查看提交状态
上面可以看到提交人的信息,以及时间,以及提交备注
将上节课写的代码拷贝到当前目录下
此时还没有同步到gitee上去
4.git三板斧
1.git add .
//将该目录的修改记录同步到本地仓库去
2.git commit -m+“提交备注”
//正式将修改更新到本地仓库
根据.git更改时间发现仓库更新
3.git push
//将本地仓库内容同步到gitee远端仓库
git log 查看同步记录
然后我们在gitee上发现同步上了.
在windows下我们使用小乌龟上传代码到gitee远端仓库 ,我们发现会有很多.obj ,.exe文件 ,我们不需要这些,我们应该怎么办?
我们先新建3个文件 c.txt x.txt2 z.txt1 我们不要上传.txt文件,.txt2,.txt1上传
将这个后缀添加到.gitignore中就可以了
5. vim修改内容
添加不要上传的文件后缀
使用三板斧提交同步代码到远端
发现没有出现.txt后缀。测试成功
我们如何在本地删除一个文件,然后同步到远端呢?
6.git rm +文件名
我们假如要删除刚才上传的两个txt1,txt2
使用三板斧同步修改到远端
删除成功
演示完成,我们需要删除我们这个仓库
这里可以查看提交的记录,
然后删除我们这个仓库
gdb调试工具
debug版本为什么比release版本文件大
用户一般用的产品只需要使用,不用带调试信息,用户也不需要调试信息,使用release版本就行,而程序员需要看调试信息找错误,所以程序员使用的debug版本,debug版本比release大是因为携带调试信息
- 背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
这里有一个问题?
for循环形式只是在c99下是允许的 ,所以要修改一下我的for循环模式,c89将变量定义写在外面
默认gcc 编译生成release版本
exe1为release版本下的
exe2为debug版本下的
明显在debug下生成的.exe文件大
使用readelf指令可以读取可执行文件的详细信息,并且通过管道(相当于把管道前处理后再干什么),grep指令将debug信息列举
我们发现exe1没有debug信息,exe2有debug信息
gdb指令
1.进入gdb
1.gdb+在debug下生成可执行文件的文件名
2.退出gdb
2.q
3.查看对应的.c文件对应行的上下文
3.list+文件名:行号/函数名
3.l+文件名:行号/函数名
(简写)
当执行完一个指令后,按回车会自动执行最近的上一个指令
简写也可以
l+函数名
l 15 显示15行的上下文
接着我们对应着vs的调试理解gdb调试下的指令
我们将代码拷到vs上去
4.添加断点
在vs中添加断点
在光标停留那一行按F9或者鼠标在对应行点击出现红点
在gdb中添加断点
4.b+文件名:行号/函数名
4.b+ 行号/函数名
(简写)
5.查看断点
在vs查看断点
直接看红圈出现的位置
在gdb中查看断点
5.info +b
5.i+b
(简写)
6.删除断点
在vs中删除断点
在打断点的行再次按一下F9或者用鼠标点击一下断点取消断点
在gdb中删除断点
6.d +断点编号
7.断点使能
在gdb中让断点关闭/打开,并非删除
7.disable +断点编号
(断点关闭)
7.enable +断点编号
(断点重启)
8.逐过程(不进入定义函数内部)
在vs中逐过程:F10
在gdb中的逐过程:
8.next
8.n
(简写)
我们在主函数那打个断点,然后使用指令r让程序跑起来,遇到main函数处打的断点停下来,然后按n,开始逐过程,我们发现到了add函数不进函数内部,z直到程序结束.
9.逐语句(进入定义函数内部)
在vs中逐语句:按F11
在gdb逐语句:
9.step
9.s
(简写)
同理,我们在主函数打断点,按r让程序跑起来,当到断点处,按s/step,我们发现可以进入add函数中
10.查看变量内容或者变量地址
在vs中查看变量内容/变量地址:
F11运行起来在监视里面添加变量/变量地址
在gbd中查看变量内容/变量地址:
10.print+变量名/变量地址
10.p+变量名/变量地址
(简写)
11.持续显示变量/变量地址
在gdb中:
11.display+变量名/变量地址
11.d+变量名/变量地址
12.取消持续显示的变量/变量地址
在gdb中:
12.undisplay+ 要取消持续显示的变量的编号
13.运行到下一断点处
在gdb中:
13.continue
13.c
这个是我们的程序
我们分别在16行,18行打断点
在16行的第一个断点停下,按continue/c进入下一个断点处.
14.运行结束所在函数,就停下来
在gdb中:
14.finish
15.跳转到指定行,中间代码都是运行过的
在gdb中:
15.until
16行直接到18行,并且中间都被执行.
17.修改变量的值
在gdb中:
17.set var +变量名=(修改后的值)
18.查看栈帧创建情况
在gdb中:
18.bt
在add函数中,我们发现add函数的栈帧在主函数的上面压着,当finish完add后,只剩下main的栈帧.
总结
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
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):查看各级函数调用及参数
quit:退出gdb