Linux调试器-gdb使用

一:gdb
-g 向可执行程序中添加调试信息:
这里写图片描述
然后用gdp调试:gdb ./test –>run ->start
run:运行程序
start:开始逐步调试;
n 进行下一步调试(不进入函数);
s 进行下一步调试(进入函数);
b:添加断点(b filename:line 向指定文件指定行添加断点或者 b line 向指定行添加断点);
i :查看断点信息;
d num 删除断点序号为num的断点;
d 删除所有断点;
l :查看当前行附近的代码
l n 查看第n行附近的代码
c 继续运行(有多个断点,调试到一个断点,可以c后运行到下一个断点);
在14行添加断点,并且查看断点,删除断点,如果有多个文件需要添加断点,可以b filename:line
这里写图片描述
watch var 监控变量var的改变;
p var 打印var变量的值;
bt 打印函数调用栈;
ctrl+d 或者q退出gdb
这里写图片描述
注:如果run 后发现有错误,可以不用一步一步调试,可以借助bt(会打印出哪里有错误)
这里写图片描述
可以看出在main函数18行有错,那么就可以list 18,查看18行附近代码,并且b test.c:18在18行添加断点,然后再重新run,运行到18后,再查看变量的变化:
这里写图片描述
二:Makefile
makefile是一个文件,自动化编译,一旦写好,就需要一个make命令,整个工程就自动编译,极大的提高了软件开发的效率;
make是一个解释makefile中指令的命令工具。
原理:make会在当前目录下找名字为Makefile或makefile的文件,如果找到,它会找文件中第一个目标文件,并把这个文件作为最终的目标文件(test),如果这个目标文件依赖的文件(test.o mytmp.o)不存在,那么make 会在当前文件找test.o文件的依赖性,如果找到再根据规则生成test.o,依次类推,直至编译出第一个目标文件。
如果需要同时编辑连个文件可以在底行模式:vnew fileneme
这里写图片描述
test.c
这里写图片描述
这时我们需要gcc test.c tmp.c -o test来进行编译,但如果文件很多,就会很繁琐,那么我们就可以写一个makefile来对进行
这里写图片描述
然后用make
这里写图片描述
但是这样有一个问题,假如只修改了tmp.c,gcc test.c tmp.c -o test,就会把test.c再编译一遍,可是test.c就没有修改呀即没有编译的必要,那么这种操作就不合适;
将makefile 修改为:
这里写图片描述
make:
这里写图片描述
这样如果只修改了mytmp.c,就只会编译mytmp.c,然后再将mytmp.o和test.o链接一起。
这里写图片描述
但是这样还存在一个问题即存在若干文件,就要手动输入若干文件,那么将makefile修改为:
待定。。。。
这里写图片描述
make:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sophia__yu/article/details/81672156