启动方式:
gdb
gdb test.out / gdb file test.out
gdb test.out core //程序异常所产生的奔溃文件
动态链接:
gdb test.out pid //监视所对应的的某一进程
启动调试流程:
gdb
gdb file test.out
gdb set arges arge1 arge2 //指定参数是可以 var g_point=(int*)malloc(sizeof(int))
run / start //程序启动后立即停止在main函数入口
gdb
gdb attach pid //链接到目标进程
gdb continue
gcc -g //编译带上调试信息
ulimit -c unlimited //让程序在奔溃时产生core文件
软件断点相关:
break func_name [ if var = value ]
tbreak func_name [ if var = value ]
break file_name:line_num [ if var = value ]
tbreak file_name:line_num [ if var = value ]
info breakpoints //断点查看
delete 1 2 n //断点删除
delete breakpoints
enable / disable //断点状态改变
调式时常用命令:
print name //变量查看
set var name=value //变量设置
next //执行下一行代码
next n //连续执行n行代码
step //执行进入函数
return [value] //强制当前函数返回
finish //运行至当前函数返回
until line //执行至目标行
jump line //跳转执行
硬件断点:
当代码位于只读存储器(flash)时,只能通过硬件断点调试
硬件断点需要硬件支持,数量有限
gdb中通过hbreak支持硬件断点
数据断点:
watch var_name //用于监视变量是否改变(本质为硬件断点)
内存查看:
x /1bx 0x804a024
u参数:b 单字节, h 双字节, w 四字节, g 八字节
函数调用栈的查看:
backtrance //查看函数调用的顺序
frame N //切换到栈编号为N的上下文中
info frame //查看当前函数调用的栈帧信息
info registers //查看当前寄存器的值
info arges //查看当前函数参数的值
info locals //查看当前局部变量的值
info variables //查看程序中的变量符号
info functions //查看程序中的函数符号
技巧:
display /f expression //断点处自动打印 display /d i display /d i*i
whatis/ptype //查看程序中的符号
list //gdb的代码查看
shell //gdb中shell操作
----------------------------------------------------------------------来源自狄泰软件学院------------------------------------------------------------------------