gdb命令使用:使用gdb之前,编译程序g++时需要加-g参数(生成调试符号表)
1、gdb filename //调试一个可执行文件
-->quit(q)退出调试
2、暂停机制(①断点、②监视点、③捕获点),在这里只说断点。
break 函数名(b)
break 行号
break 路径:行号(demo_11_15/swap.cpp:5)
break 路径:函数名(demo_11_15/swap.cpp:swap)
info breakpoints (i b) //查看所有断点
注意:在不停止gdb的情况下,从新编译代码后,gdb进行run(r)时可以感知代码的变化
delete 断点号或函数名(在之前可以先用i b查看断点) //删除一个或多个断点
clear //清除gdb将执行的下一指令处的断点,可以当delete用,用法相似。
disable 断点号 //禁用断点
enable 断点号 //启用断点
注意:下图type为类型(①断点、②监视点、③捕获点),disp为断点的状态(keep、del、dis),Enb为是否启用。
3、执行程序
run(r) //使程序执行起来。或重新执行
step(s) //单步执行(进入函数)。
next(n) //单步执行(不进入函数)。
continue(c) //继续执行直到下一个断点或结束。
continue n //在后面的n个断点不停止,停止到n+1断点处(在循环中意为执行n次循环)。
finsh(fin) //执行完当前函数
until(u)//执行完当前循环。下图是until的一个特例。until后面也可以跟行号,函数名
4、条件断点
break main if i > 5 //当执行到循环i>5时停下。
break main if i == 10
cond 1 i == 3 //将正常断点1设置为条件断点,条件为i == 3
cond 1 //恢复断点1为正常断点
。。。。复杂的以后再补上。
5、监视点
watch i //当每次i变化时都会断住。
watch 表达式
6、变量
print 变量(p) //打印出变量值。
p/x i //打印i的16进制值 类似还有 p/c i 和p/s i //打印ascii字符和string
info locals //打印当前栈帧中的所有局部变量
set $i = 0 p w[$i++] //当w为程序中的数组时,可以让i当做数组的下标。i是gdb设置的一个方便变量(convenience variable)
p *$i //打印变量$i的值