文章目录
前言:我们将解决一下几个问题
什么是gdb
gdb是什么呢?gdb其实就是Linux下的调试器。
为什么要有gdb
程序的发布方式分为两种,debug模式和release模式
而Linux gcc/g++出来的二进制程序,默认是release模式,而release模式是无法直接被调试的!!
要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项
怎么使用gdb
Linux项目自动化构建工具-make/Makefile
make是一个命令工具,是一个解释makefile中指令的命令工具。
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
如何编写Makefile文件
首先:输入指令 touch Makefile
创建一个名为Makefile的文件。
其次:vim Makefile
打开文件,进行编辑。
最后:在文件中输入依赖关系和依赖方法。
举个简单的例子:
我有一个test.c
的文件。我想创建一个可执行程序的名字叫做 test.
那么我在文件中输入:
test:test.c
这是什么意思呢?
test 依赖于 test.c文件
依赖的方法是什么呢?(这里需要编译就使用gcc)
这里是需要换行,并加一个table。
gcc -o test test.c
再紧接着加入声明:
.PHONY:clean
clean:
这里也需要换行并加入table
rm -f test
最后大概就是这个样子。
让我们来看看效果。
输入一个make指令,就可以自动编译。
使用make clean
就可以删除指定文件。
使用gdb
首先:我们在进行编译的时候要加上-g,这样编译出的文件才可以直接进行调试:
直接在Makefile中修改即可,以上面的例子继续修改。
gcc -o test test.c -g
然后再调试 编译出来的可执行程序.
gdb test
光标在的那一行,开头是(gdb),就证明我们进入了调试模式。
调试指令
1.list(l) 显示代码
通过list
显示部分代码,再输入l显示剩余代码。
而list
显示的是它自己所要展示的方式。
可以看到是从第7行开始显示的。
如果我们要从开头开始显示的话
我们使用命令list 0
敲一下回车,再显示剩余的一部分代码
2.run(r)指令 调试
开始调试,如果没有设置断点,就直接运行结束!
没有断点直接运行结束
有断点就运行到断点处
3.break point (b)指令 打断点(方式之一)
b 行数k 在第k行打一个断点
4. info b 查看断点
5.d 删除断点
删除断点是删除断点编号,与查看断点结合。
如果删除行号的话,是没有用的。
删除编号为1的断点。
6.next(n) 逐过程(VS的F10)
r运行到断点16行处,n逐过程到17行。
7.step(s)逐语句 (VS中的F11)
s进入到函数内部去。
8.p 打印变量内容
p变量名:打印变量内容
9.bt:查看当前的调用堆栈
10.finish
将当前函数跑完
在函数内部的时候 使用finish,跑完整个函数。
11.display 长显示.
类似于VS中的监视窗口
12.undisplay 取消长显示
undisplay 加 长显示编号。
13.continue© 断点跳到断点
14.disable/enable 断点编号:使能(关闭和打开) 断点
关闭断点的意思 并不是删除断点,而是暂时使断点失效