-
gdb:调试器
调试器的功能:调试,观察程序的运行过程,通常目的都是为了排查程序的运行错误。
程序的错误分类:编译错误,链接错误,运行时错误(运行中逻辑不对以及程序运行时崩溃)
调试程序的前提:程序必须是一个debug版本的程序;gcc/g++默认生成release版本程序,若要生成debug版本,则使用- g 选项
可执行程序的分类:debug调试版—加入程序调试信息,并且不会对代码进行优化;release发布版—不包含调试信息,并且会对代码进行优化。gdb常用调试指令:
流程控制:
run:直接运行程序
start:开始逐步调试
list:查看(指定文件)调试行附近代码—list test.c:12
next:下一步(逐过程-遇到函数直接运行完毕)
step:下一步(逐语句-遇到函数则进入函数继续调试)
until:直接运行到指定位置—until test.c:16
continue:继续从当前调试位置运行
break:打断点—break test.c:14 break function_name(在函数下第一行打断点)
info break:查看断点信息
delete:删除全部断点—delete id 删除对应断点
watch:变量监控断点(当变量发生改变时停止)—watch variable_name
quit:退出gdb调试内存控制:
print:查看或设置变量内容—print var_name print var_name = val
backtrace:查看函数调用栈(通常用于检测程序运行时崩溃位置,栈顶位置的函数就是程序发生崩溃的位置) -
make/makefile
makefile:是一个文本工具,记录一个项目的构建流程。makefile的编写规则:
目标对象:依赖对象
/t(制表符)为了生成目标对象所要执行的指令
预定义变量的使用:
$@表示目标对象,$^ 表示所有依赖对象,$<表示依赖对象的第一个
src=$(wildcard ./*.c)获取当前目录下所有以.c结尾的文件的文件名称并存放到src变量中
obj=$(patsubst %.c, %.o, $(src))将src变量中内容的.c替换为.o,然后存放到obj变量中
程序的编译过程:预处理,编译,汇编,链接 — 在项目构建中会整体分为两步 — 编译与链接(好处是如果只是修改了一个.c文件,以前直接对所有.c进行编译生成可执行程序的过程来说,需要重新编译所有.c生成可执行程序,效率低下。因此分为两步进行操作,先把每个.c都生成自己的.o,然后再把所有的.o都链接到一起,这样做一旦一个.c发生改变,那么只需要对这一个.c进行编译生成.o之后,重新链接一次就可以生成可执行程序了,其他的.c不需要编译)
伪对象:声明一个目标对象与外部文件无关,表示每次这个对象不管是否最新都要重新生成 — .PHONY:make:是一个解释程序,对makefile中记录的构建规则流程逐步解释执行,完成项目的构建。
make的解释执行规则:
(1)在命令行中执行make命令,则表示运行make解释程序,程序会在当前目录下找到名为makefile/Makefile的文件,解释执行其中的项目构建规则。
(2)在规则中,找到要生成的第一个目标对象,判断目标对象是否已经存在,存在的话是否需要重新生成(根据源码文件的最后一次修改时间对比),然后执行对象生成指令。
(3)make每次在makefile中只会找到第一个目标对象进行生成,生成之后就会退出。
(4)make在生成目标对象的时候,会先查找依赖对象的生成规则,先生成依赖对象,然后再去生成目标对象。 -
git:项目的版本管理工具(整理归档项目周期的各个阶段,便于项目的管理,即出错回滚)
git基本操作:
(1)在github上建立远程仓库
(2)将远程仓库克隆到本地:git clone https://github.com/…/…git
(3)提交本次修改记录:git add --all ./(提交当前目录下所有文件)git add path/filename(提交指定路径文件)
(4)提交本地仓库版本管理:git commit -m “本次修改的备注信息”
(5)将本地版本同步到远程仓库:git push origin master(master是主分支)
Linux常用工具2(gdb、makefile、git)
最新推荐文章于 2024-05-09 10:49:44 发布