gdb即GNU debugger,用来调试程序
gdb使用前提
要使用gdb,则需要在编译源代码时候使用-g
参数1
gcc -g –o test test.c
启动gdb
1 | gdb 程序名 [corefile] |
corefile是可选的,但能增强gdb的调试能力
Linux默认是不生成corefile的,所以需要在用户profile文件中添加ulimit -c unlimited
,修改完成之后让profile文件及时生效
另外程序错误时候会生成core或者core.*文件,也可作为其参数
gdb的使用
快速定位软件出错位置
启动gdb调试错误
1
gdb test core
关闭多余软件信息
1
gdb -q test core
如果软件出错,就会打印出出错的语句
使用gdb调试
启动gdb
1
gdb test
运行程序
1
(gdb) run
显示导致段错误的执行函数树
1
(gdb) where
显示包含错误附近代码
1
(gdb) list [m,n]
m,n为可选参数,表示起始行和结尾行
不带参数默认显示附近10行
- 显示表达式、变量的值
1
(gdb) print 变量(表达式) (gdb) print 'file'::变量(表达式) ##''是必须的,以便让gdb知道指的是一个文件名。 (gdb) print funcname::变量(表达式)
e.g.1
(gdb) print i
变量的类型
1
(gdb) whatis i
结构的定义
1
(gdb) ptype st
gdb的断点使用
break命令设置断点
break linenum
break funcname
`
bash
break filename:linenum1
2```bash
break filename:funcname进入gdb调试模式
1
gdb -q test
1 | (gdb) break 5 |
1 | (gdb) run |
以上是进入gdb调试,在代码第5行设置断点,运行程序
查看已设置断点
1
(gdb) info break
从断点以后继续执行
1
(gdb) continue
删除一个断点
1
(gdb) delete
改变一个变量的值
1
(gdb) set variable varname = value
step命令
当遇到一个函数的时候,step将进入函数,每次执行一条语句,相当于step into1
(gdb) step
next命令
当遇到一个函数的时候,next将执行整个函数,相当于step over1
(gdb) next
return [value]命令
停止执行当前函数,将value返回给调用者,相当于step return1
(gdb) return [value]