gdb即GNU debugger,用来调试程序

gdb使用前提

要使用gdb,则需要在编译源代码时候使用-g参数

gcc -g –o test test.c

启动gdb

gdb 程序名 [corefile]

corefile是可选的,但能增强gdb的调试能力

Linux默认是不生成corefile的,所以需要在用户profile文件中添加ulimit -c unlimited,修改完成之后让profile文件及时生效

另外程序错误时候会生成core或者core.*文件,也可作为其参数

gdb的使用

快速定位软件出错位置

  • 启动gdb调试错误
gdb test core
  • 关闭多余软件信息
gdb -q test core

如果软件出错,就会打印出出错的语句

使用gdb调试

  • 启动gdb
gdb test
  • 运行程序
(gdb) run
  • 显示导致段错误的执行函数树
(gdb) where
  • 显示包含错误附近代码
(gdb) list [m,n]

m,n为可选参数,表示起始行和结尾行

不带参数默认显示附近10行

  • 显示表达式、变量的值
(gdb) print 变量(表达式)
(gdb) print 'file'::变量(表达式) ##''是必须的,以便让gdb知道指的是一个文件名。
(gdb) print funcname::变量(表达式)

e.g.

(gdb) print i
  • 变量的类型
(gdb) whatis i
  • 结构的定义
(gdb) ptype st

gdb的断点使用

  • break命令设置断点
break linenum
break funcname
break filename:linenum
break filename:funcname
  • 进入gdb调试模式
gdb -q test
(gdb) break 5
(gdb) run

以上是进入gdb调试,在代码第5行设置断点,运行程序

  • 查看已设置断点
(gdb) info break
  • 从断点以后继续执行
(gdb) continue
  • 删除一个断点
(gdb) delete
  • 改变一个变量的值
(gdb) set variable varname = value
  • step命令

    当遇到一个函数的时候,step将进入函数,每次执行一条语句,相当于step into
(gdb) step
  • next命令

    当遇到一个函数的时候,next将执行整个函数,相当于step over
(gdb) next
  • return [value]命令

    停止执行当前函数,将value返回给调用者,相当于step return
(gdb) return [value]
05-25 20:13