1.启动调试
前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。
gdb program //最常用的用gdb启动程序,开始调试的方式
gdb program core //用gdb查看core dump文件,跟踪程序core的原因
gdb program pid //用gdb调试已经开始运行的程序,指定pid即可
gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可
2.调试命令
(1)执行命令模式
-batch选项。
比如:打印$pid进程所有线程的堆栈并退出。
gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid
(2).交互模式
run //运行程序
continue //中断后继续运行到下一个断点
step //单步执行,进入函数
next //单步执行
return //函数未执行完,忽略未执行的语句,返回。
finish //函数执行完毕返回。
call //调用某一个函数 fun("1234")
(backtrace)bt //显示栈桢
bt N //显示开头N个栈桢
bt -N //显示最后N个栈桢
(frame)f N //显示第N层栈桢
list //显示源码
set directory //设置gdb的工作目录
pwd //当前的工作目录
(3)反复执行
continue N //连续执行cointiue N次,一般用于避免频繁断点
step N
next N
3.断点
break 函数名 //设置断在某个函数
break 文件名:行号 //设置断在某一行
info break //查看设置的断点信息
break if condition //条件断点