gdb
gdb:GUN debugger
- 启动程序,可按照用户自定义的要求随心所欲的运行程序。
- 可让被调试的程序在用户所指定的调试的断点处停住(断点支持条件表达式)
- 当程序停住时,可以检查此时程序中所发送的事。
- 动态改变程序的执行环境。
启动gdb调试程序
- gdb
- gdb core
- gdb
一些选项
查看
- list/l:查看最近10行源码
- l 1:查看第一行起始的代码
- l 2,10 查看第二行到第十行代码
- 1 ,15最多查看到第15行代码
- l main:查看主函数代码
- list fun:查看fun函数源码
- list file:fun 查看file中的fun函数源码
断点
- break/b:设置断点
- break 行号:设定断点
- break fun
- break file:行号
- break file:fun
- break if :条件成立时程序停住,比如b if i=50
- info break:查看断点(也可缩写为i b)
- watch expr:expr改变时,程序停住
单步调试
- run(r):启动程序(可带参数,即传给程序的参数列表)
- step(s):单步跟踪,进入函数,类似step in
- next(n):单步跟踪,不进入函数,类似step out
- print(p) 变量名(print变量值或表达式)
- until:跳出循环(此时运行到循环外的下一条指令)
- continue(c):运行到下一个断点
- finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。
查看运行时数据
- print可缩写为p
- print:查看变量值
- ptype:查看类型
- print array:查看数组
- print *array@n:查看动态数组前n个元素
- 对于静态数组array,print *array@2:表示打印从第0个元素开始的两个元素
- print 变量名=值:更改变量的值
- bt:函数调用栈回溯
程序错误
- 编译错误
- 运行时错误
逻辑错误
段错误就是由于访问非法地址而产生的错误,访问系统数据区,尤其是往系统保护的内存地址写数据。最常见的就是给一个指针以0地址;内存越界(数组越界,变量类型不一致等)访问到不属于你的内存区域。
core文件调试
- 在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump
生成core文件
- ulimit -c 查看core-dump状态
- 以下两条命令设置core文件大小
- ulimit -c 数字(如:ulimit -c 1024)
- ulimit -c unlimited
使用core文件
- gdb 产生core文件的程序名 core文件