6. gdb调试器
GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它是一种强大的命令行调试工具。。一个合格的调试器需要有以下几项基本功能:
能够运行程序,设置所有能影响程序运行的参数;
能够让程序让指定的条件下停止。
能够在程序停止时检查所有参数的情况。
能够根据指定条件改变程序的运行。
6.1 gdb 基本用法
需要调试的程序,在编译时要使用调试选项。在默认的情况下,调试符号不会编译到程序中。调试之后,不需要重新编译程序。
gdb [可执行文件名] 出现 (gdb)#这里可以输入调试命令
注意:可执行文件编译的时候,必须加入参数-g,才可以使用gdb
6.2 gdb 常用命令
进入gdb调试界面后,可以输入以下命令:
list:显示程序内容,默认一次显示10行,如需继续,继续回车即可或者继续list。
list函数名:显示函数对应内容
list行号:显示该行周围的源代码
Set listsize 行数:设置显示代码的行数
Show listsize:显示当前listsize的设置
listfirst,last:显示first和list之间的内容
next:执行一行源代码但不进入函数内部
step:执行一行源代码并进入函数内部。
continue:继续运行,到下一个断点停止
run:执行当前被调试的程序。
quit:退出gdb 。
break n:在第n行设置断点,这将使程序执行到这里时被挂起。
break n 条件:当条件满足是,在该行断点生效。
break 12 if i==12
break 函数名:在函数的起始位置设置断点,这将使程序执行到这里时被挂起。
info break:显示断点信息。
Delete n:去除第n号断点
Disable n:暂停使用第n号断点
Enable n:启动第n号断点
Break :从后向前清除断点
print 变量名:显示变量的值
file 文件名:如果直接执行gdb,没有跟文件名,可以通过这个调入想要调试的可执行文件。
kill:终止正在调试的程序
watch:使你能监视一个变量的值而不管它何时被改变。
make使你能不退出gdb,就可以重新产生可执行文件。
shell:使你能不离开 gdb 就执行UNIX shell命令
Ctrl+c:发信号量中断当前操作
注意:
所有命令均可以使用命令的首字母来执行,例如list可以用l执行。
7. make 工程管理
问题:有多个源文件的时候,如何生成一个可执行文件?
方法1:
gcc -Wall -o mytest test1.c test2.c test3.c # -Wall 允许发出gcc提供的所有有用的报警信息
方法2:
gcc -Wall -c test1.c gcc -Wall -c test2.c gcc -Wall -c test3.c gcc -o mytest test1.o test2.o test3.o
可以发现是比较繁琐的,这时候就引入了make工程管理:
Make工程管理器是Linux下的一个“自动编译管理器”,“自动”是指它能够根据文件的时间戳,自动发现更新过的文件而减少程序编译的工作量。能够通过读入Makefile文件的内容来执行大量的编译工作,用户只需要编写一次简单的编译语句即可。Make工具大大提高了实际项目的工作效率,几乎所有Linux下的项目编程都会涉及它。
即:通过Makefile 文件,制定编译规则,根据时间戳,判断文件是否进行过修改。
Makefile编译规则格式:
目标名称: 依赖文件(一般是.o文件,如果没有,就会找对应的.c文件,) <tab>命令
执行格式:
make 目标名称(如果省略,自动找第一个目标执行)
例如:
all: main.o foo1.o foo2.o # 虽然没有.o文件,但是会自动根据依赖文件是.c,就会根据.c文件自动生成对应名字的.o目标文件 gcc main.o foo1.o foo2.o -o all # 伪目标:不需要依赖文件,只执行命令 clean: rm -f *.o
make all
此时我们如果修改了foo1.c,按以前的方法,还需要重新编译,但是引入make工程管理,只需再次make就会自动编译。
make clean # 执行尾目标