注:Linux下输入 * 号时,前面需要加\(转义符),即\*。因为Linux下的*代表所有文件。
启动gdb - gdb 程序名 [corefile]
corefile是可选的,但能增强gdb的调试能力。
Linux默认是不生成corefile文件的,所以需要在.bashrc文件中添加
ulimit –c unlimited(修改.bashrc文件后记得 . .bashrc 让修改生效)
为了能调试程序,makefile文件中,.c.o标号下需写为:(加上-g)
.c.o:
$(CC) -Wall -g -o $@ -c $<
如上图所示,make 编译链接,运行可执行文件时出错,此时发现多了core.5691文件,只能用gdb打开,gdb靠core文件提示你程序哪里出错。若用gdb –q mycal core.5691,即中间加上-q,可去除gdb版本号等信息。
或者可以先用gdb运行程序,再用run命令:
gdb mycal -q
runrun之后:
where 只显示出错的行的代码
list 显示出错的代码的上下十行内的代码,list也可以带参数
print i 显示变量i的值
break 设置断点
break linenum 在某一行设置断点
break funcname 在某个函数设置断点
break filename:linenum 在其他文件中某行设置断点
break filename:funcname 在其他文件中某函数设置断点
注:可以设置多个断点,info break 查看有多少断点,delete 删除一个断点
continue 从断点以后继续执行
改变一个变量的值
set variablevarname = value,varname是变量的名称,value是变量的新值。
即用以上命令使得动态改变变量的值。
单步调试
step命令: 每次执行一条语句,相当于step into
next命令: 当遇到一个函数,next将执行整个函数,相当于step over
return [value]命令:停止执行当前函数,相当于step return
注:gdb记住了最后一个被执行的命令,因此若需要重复执行某条命令,不需要每次都键入命令。