release模式
,所以我们在调试前应加一个**-g**选项进行编译。gcc test.c -o g_test -g
debug版本的可执行文件也会比release版本大一些,这大的空间里面存放的就是调试信息。
sudo yum install -y gdb
l 行号:从指定的行号开始往下显示源代码,每次显示10行 (l – list);
l 函数:列出某个函数的源代码 ;
r:运行程序 (r -> run);
b 行号:在某一行打一个断点,相当于VS中的F9 (b –> breakpoint);
info b:查看断点;
d 断点编号:删除断点 (d –> delete);
r:调试运行,如果程序中有断点,则在断点处停下来,如果没有,则直接将程序跑完,相当于VS中的F5 (r –> run);
n:逐过程调试,相当于VS中的F10 (n –> next);
s:逐语句调试,相当于VS中的F11 (s –> step);
c:运行至下一个断点处停下 (c –> continue);
bt:查看调用堆栈 (breaktrace);
p 变量:查看变量值 (p –> print);
display/undisplay 变量:跟踪查看一个变量,每次停下来都显示它的值,undisplay 取消对先前设置的那些变量的跟踪;
finish:把当前函数运行完;
disable breakpoints:禁用断点;
enable breakpoints:启用断点;
quit:退出 gdb;
#include
int Add(int x, int y)
{int m = x + y;return m;
}int main()
{int a = 10, b = 20;int c = Add(a, b);printf("%d\n", c);return 0;
}
l
每次显示10行,下次接着上次的进行显示)按住**回车(ENTER)**也可以执行上次执行的命令。
删除断点。
调试运行。
p : 查看变量值
display : 追踪显示变量值
undisplay : 取消追踪显示变量值
在大型的工程中,源文件不计其数如果我们每个源文件都手搓编译的话,是不是太麻烦且浪费时间了呢?
Linux 提供了项目自动化构建工具 – makefile
来帮助我们解决这个问题;makefile 定义了一系列的规则来指定如何对众多的源文件进行管理;makefile带来的好处就是 – “自动化编译”,即 makefile 一旦写好,以后我们就只需要一个 make 命令,整个工程就可以完全自动编译,极大的提高了软件开发的效率。
makefile 只是当前路径下一个普通文件,编写他最重要的是依赖关系和依赖方法。
mytest:test.c //依赖关系gcc test.c -o mytest //依赖方法.PHONY:clean //伪目标
clean:rm -f mytest
写好makefile后,我们在当前路径下执行make,系统会自动查找makefile文件进行命令执行。