目录
[1.2.5 .gitignore](#1.2.5 .gitignore)
1.2.6Windows上操作(需要安装Tortoisegit)
[2.1 -g选项](#2.1 -g选项)
[2.3 安装cgdb](#2.3 安装cgdb)
[disable和enble +断点编号](#disable和enble +断点编号)
[info locals](#info locals)
[set var](#set var)
一.版本控制器Git
1.1版本控制器
为了能够更方便我们管理不同版本的文件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到一个文件的历史,以及它的发展过程的系统。通俗的讲就是一个可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业。 目前最主流的版本控制器就是 Git。Git可以控制电脑上所有格式的文件,例如doc、excel、dwg、 dgn、rvt等等。对于我们开发人员来说,Git最重要的就是可以帮助我们管理软件开发项目中的源代码文件!
git是一个底层的版本控制器软件。gitee或github是基于git的网站或平台。
1.2Git的操作
1.2.1从远端仓库到本地
我先在gitee创建一个远程仓库:
新创建好的仓库会有下面的这些东西:
git既能服务客户端也可以服务远端,所以我们的远程仓库也可以拉取到本地。
然后再命令行输入:
git clone+(仓库链接)
进入仓库跟我们在远程仓库看到的东西的一样的:
这里面有隐藏文件.git这个其实就是本地仓库。它会记录我们所有的修改记录,git在提交的时候只会记录变化的部分。
举个例子,我创建一个test.c:
本地仓库是没有记录下来的,因为.git没有记录,而我们当前的目录只是一个工作区:
那要怎么添加?
1.2.2工作区到本地暂存区
git add+文件名:
虽然但是这样不是真正的添加到本地仓库,而是到一个暂存区的地方:
git status可以查看有哪两个新文件:
1.2.3本地暂存区到本地仓库
git commit -m +"文件描述"
这个的作用就是移动到本地仓库:
git log :
查看日志提交记录:
1.2.4本地仓库到远程仓库
git push
提交到远端仓库:
下面还要输入用户名和密码
这样的就成功了:
到我们的gitee看一下:
1.2.5 .gitignore
vim查看文件里的内容(保存的是需要忽略特定后缀的文件):
上传文件的时候可以帮我们过滤掉里面后缀的文件:
1.2.6Windows上操作(需要安装Tortoisegit)
先新建一个文件:
记得先复制远程仓库的链接。
打开文件,右键选择gitclone:
它会自动帮我们填好远端仓库的链接,直接点击OK。
上面是从远端到本地的过程。
我修改一个文件的内容:
现在要从本地到远端:
在Windows点击commit就行了,因为它会自动的帮我们把add个commit一起做了:
然后点击push:
完成:
1.2.7同步远端和当地
当我们在上面用Windows机器对文件进行了修改更新了远端仓库的内容,那我的Linux机器并不知道远端更新了,这时如果我去更新远端仓库的话就会出现冲突。
git pull:
把远端仓库的内容做一次更新,之后再进行push:
这里就成功了。
同理,Windows的push报错也是相同的道理。
二调试器-gdb/cgdb使用
2.1 -g选项
程序的发布方式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的二进制程 序,默认是 release 模式。
Linux下我们编译好的代码无法直接调试
要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项,如果没有添加,程序无法被编译
make:
如果不加-g选项的话,我们形成的可执行程序要比加了的小,因为默认没有debug文件:
2.2先简单认识gdb
gdb +文件名:
开始调试
l+数字
从哪个位置开始查看代码,可以回车查看下一页
b+数字和r
打断点 和运行:
c
运行到下一个断点处
这终归还是很麻烦,不好直观的看到代码运行
2.3 安装cgdb
安装cgdb:
• 上面的基本调试还是麻烦,虽然是黑屏,但是还是想看到代码调试
• 推荐安装cgdb: • Ubuntu:sudo apt-get install -y cgdb
• Centos: sudo yum install -y cgdb
2.4cgdb命令
b+文件名+:+数字
打断点
14的数字会变红:
info+b
查看断点
Num列表示断点编号
d+断点编号
删除断点,注意d不能跟行号
n
逐过程
在17行打一个断点,按r到这一行会停下来,再按n会到下一行。
s
逐语句
跟上面一样的断点这里会进入函数的内部:
bt
查看栈桢 :
系统每调用一次函数都会创建一个该函数的栈桢。
finish
结束当前函数的运行:
直接跳到原来进入函数的地方:
p+变量:
查看临时变量的值:
disable和enble +断点编号
断点可以被使能
1号断点的Enb变成了n,此时的断点不可以被使用,但是存在。
until
某一个函数内部直接跳转到某一行:
display+变量和undisplay+编号
p只能显示当下的变量值,想让变量值长显示:
注意undisplay加编号
info locals
查看函数中所有变量的值:
2.5调试技巧
watch
监视某个变量是否变化:
使用info b可以查看我们刚才监视的变量的编号,这里是2。1是断点,取消监视的做法跟删除断点的做法一样,d+编号。
时刻可以看到变化 (注意只有监视的值被修改了才会通知我们)
set var
可以直接在函数内部改变某个变量的值,来演示结果被修改之后的值是不是正确的。
上面可以看到我把result的值更改为了9999,到达函数外部n的值也变成了9999 。
条件断点
添加条件断点
只有当i==10时,才会停下来:
进入Sum函数后,按c跳到下个断点:
查看i 的值,就是在i等于10时停下的:
给存在的断点添加条件
condition+断点编号+条件
本来有两个普通断点,后面我把第二个断点添加了额外条件:i==20时才停下:
cgdb分屏操作ESC进入代码屏,i回到gdb屏