gdb调试
gdb功能
- 启动程序,可以按照用户定义的方式来运行程序
- 设置断点(断点可以用条件表达式)
- 断点处查看数据
- 动态改变程序执行环境(修改变量值)
gdb常用命令
-
gdb运行程序
gdb [程序名]
-
启动程序 <缩写 r>
run [args...]
-
查看代码 <缩写l >
- list [line]
- list [lineStart, lineEnd]
- list [func]
- list [file:func]; list [file:line] ;
-
设置断点 <缩写 b>
- break [line] break [func]
- break [file:line] break [file:func]
- break [line/func] [if <condition>] watch exp 监控变量,发生变化触发断点
- delete [index] <缩写d> 删除断点
- disable/enable [index] 激活/去激活断点
-
查看断点<缩写 i b>
info break
-
单步跟踪 <缩写 s>
step
回车 执行上一条命令
next <缩写 n> 不进入函数内部
-
打印变量 <缩写 p>
- print [val]
- print [file::func::val]
- x/32 [addr] 打印地址上的数据 32 字节
-
继续执行代码
- until 执行完当前循环
- continue 到下一个断点 <缩写 c>
- finish 执行到函数最后
gdb调试
-
查看运行时数据
- print 查看变量值
- ptype 查看类型
- print array 查看数组 (p arr[0], p &arr[0] ...)
- print *[email protected] 查看动态内存 (内存后多少数据,事实上 *array 可以是任意变量,然后打印变量后len个数据 )
- print x=5 改变变量值
- 动态的赋值p val=…
-
跳转
jump
-
查看调用桟
backtrace <缩写 bt>
调试程序错误
-
编译错误
编译器差错(编译提示)
-
运行时错误
运行时程序崩溃
-
逻辑错误
程序运行和预想的不一样
-
段错误
访问非法地址产生的错误
core文件调试
core文件:
程序崩溃时,一般会产生一个 core文件,记录了程序崩溃时候的内存映像,并加入调试信息。core文件生成过程教 core dump
-
设置生成core文件:
ulimit –c 查看 core-dump状态, 默认是0
ulimit –c [num] 限制core文件大小
ulimit –c unlimited 无限制
ulimit –a 查看ulimit所有参数
-
gdb调试 core文件:
gdb [bin file] [core file]