
本文共 2209 字,大约阅读时间需要 7 分钟。
一、调试器(gdb)
我们在Windows操作系统对自己所写代码进行检查时,大多都有专门的平台(如:VS)对其进行调试,那么在Linux操作系统中,也有对应的调试器gdb。但是需要注意的是在Linux下调试程序,需要在编译的时候,将程序编译为debug版本。因为Linux操作系统下默认在编译时生成的是realse版本,若想生成debug,则在编译的时候需要增加-g
的参数。
1. 调试可执行程序
gdb [可执行程序]
:进入调试状态l
:查看源代码,若显示不全,则可再按下l
键,即可显示未显示的部分b [源文件中的行号]
:打断点delete [断点的序号]
:去点断点i b
:查看断点信息(包括了断点序号)disable [断点的序号]
:使断点失效(断点本质上还是在的,只是程序调试时不会在此处停留)enable [断点的符号]
:使断点生效r
:使程序运行s
:逐语句执行n
:逐过程运行(和逐语句运行的区别是是否进入函数内部,逐过程是不进入的)c
:继续执行,遇到下一个断点时就会停止p [变量名称]
:打印变量的值(不仅仅局限于普通变量,还有指针变量,对象等等)q
:退出调试bt
:查看调用堆栈f [堆栈序号]
:跳转到某一个具体的堆栈- 在开始执行gdb命令后,按回车,可以执行上一条语句
2. 调试coredump文件
Linux在运行程序的过程中如果由于各种异常或者Bug导致程序直接退出,比如段错误(segmentation fault),就会在满足一定条件下产生一个coredump文件.通常coredump文件包含了程序运行时内存、寄存器状态、堆栈我指针、内存管理信息以及函数调用堆栈信息,本质上是在调试程序崩溃之后产生的一个内存镜像文件
配置coredump可以使用ulimit -c unlimited
来打开coredump的开关,(ulimit -a
是显示所有的)
采用gdb [可执行程序] [coredump文件]
来对其进行查看
二、make&&makefile
- make是自动化的解释器,makefile是一个文件
- 通过make解释makefile文件,构建可执行程序
- makefile文件的规则:
- 目标文件:需要生成的可执行程序或目标程序
- 依赖对象:生成目标对象的时候所要依赖的文件
- 编译命令:如何使用依赖对象生成目标对象
- makefile文件编写格式:
make解释makefile文件的原则
原则1:make解释器在解释makefile时,会对比依赖对象(源文件)和目标对象(可执行程序)的生成时间
- 如果目标对象生成的时间距离较近,说明目标对象是最新的,不需要重新编译makefile文件 即 (time - 目标对象生成时间) < (time - 依赖对象生成时间),则不编译
- 如果依赖对象生成的时间距离现在比较近,说明依赖对象更改过,需要重新编译makefile文件 即**(time - 目标对象的生成时间) > (time - 依赖对象生成时间)**,则重新编译
原则2:只为生成第一个目标对象而服务,一旦make解释生成了第一个目标对象,则停止解释,如下图:
makefile文件中写了两个目标对象a和main
而用make解释器解释时,只解释了第一个目标对象
![]()
怎么解决此类问题呢,我们来看原则3
原则3:make解释器在解释makefile时,为了生成第一个目标对象,也会判断第一个目标对象依赖的对象是否存在,如果不存在,则makefile会在后续语句中进行查找,如下图:在makefile文件中用all作为目标对象,寻找依赖对象为a,main的存在,发现没有,则继续在后续语句中寻找
直接用make解释器进行解释,可发现两个对象都被解释
![]()
预定义变量和自定义变量
$^
:依赖的所有对象
$@
:目标对象 $符号相当于解引用符号,可以拿到变量中的内容 举个例子: 假设开始文件夹有a.c,b.c,d.c,main.c,test.c和makefile文件,如下图:
要求在makefile文件中一次生成对应的可执行程序文件test和main 代码如下图:
其中,$^和 $@就是预定义变量,CFLAGS和BIN1、BIN2是系统自定义文件 执行make解释后,会根据目标对象来寻找对应的依赖对象,从而生成对应的可执行程序
makefile清理
即在makefile中删除生成的目标对象 在makefile中使用clean: 语句
然后在外面直接调用make clean
即可清除生成的目标对象,如下图: git操作
- 克隆仓库
git clone "url"
其中url是你想要克隆仓库的地址(可以是github中的,也可以是码云中的) - 上传 ① 标记:告诉git工具需要管理哪些文件
git add [FileName]
②提交到本地仓库git commit -m [提交日志]
③推送给远端仓库git push origin [分支名]
注:如果是自己的仓库,分支名一般都为master - 删除仓库当中的内容 即删除本地仓库的内容 + 远端仓库内容
git rm "FileName"
然后重复步骤2中的②③步骤 - 从远端仓库下载源码
git pull
注:上述步骤2,3,4一定要在自己的本地仓库运行(即自己电脑上存放git clone 下来文件的地方)
发表评论
最新留言
关于作者
