命令的自动补全
GDB中支持命令的自动补充,包括补全命令(显示出完整格式的命令)和列举命令所有参数的候选项。使用时需要双击 Tab 键。
1.对于补全完整的命令格式来说,如果存在有且只有一个可能的命令,那么命令就会被自动补全。例如:
(gdb) info bre<TAB>
双击 TAB 键就会补全剩余的部分,因为 info 子命令中只有 breakpiont 以‘bre’开头:
(gdb) info breakpiont
如果存在候选项不止一个,那么就会列举出所有可能的命令候选项。例如:
(gdb) con <Tab>
(gdb) con
condition continue
2.列举命令所有参数的候选项,例如:
(gdb) catch <TAB> //双击TAB键,候补的选项不止包含一个,会把可能的选项列举出来。
(gdb) catch
assert exception fork load signal throw vfork
catch exec handlers rethrow syscall unload
常见的命令的使用
下面介绍的命令都是我们在程序调试阶段经常使用的,下面的都是对这些命令做一些简单的介绍,后面会有更加详细的介绍。
1.查看源码使用 list 命令,使用方式展示如下:
list
使用 list 命令就可以查看源程序的代码,默认显示 10 行。命令缩写为 l。
2.设置断点使用到 break 命令,调试程序基本上都是在程序的运行阶段,使用这个命令可以使程序产生中断,方便我们调试。使用方式展示如下:
break (breakpoint) //若没有参数则停在下一条指令处
break filename : [location] //在源文件 filename 的 location 处停住,location 可以表示源文件的某一行,函数名或者是一个地址。
break [location] if [condition] //条件判断,在条件成立时设置中断,condition 表示条件。
查看断点,可以使用命令:
info break
3.设置观察点,使用到命令 watch ,观察点一般观察某个表达式的值是否发生变化,如果有变化,会马上停住程序。使用方式展示如下:
watch [expression] //expression 表示一个表达式
4.运行程序使用到 run 命令,使用方式展示如下:
run app [argv1] [argv2] …
run命令后跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<>)和通配符(*,?,[])在内。
5.打印变量信息使用到 print 命令,使用方式展示如下:
print /format //format 表示的是打印输出的格式。
格式符号如下:
x:将数据作为整数数据,并以十六进制打印。
d:打印带符号整型数据
u:打印以无符号整形数据
o:以八进制打印整型数据
t:以二进制打印整形
a:打印地址,打印16进制的绝对地址和最近符号的偏移量。可以用这个格式找出一个未知地址位于何处,找到函数地址,实例:
(gdb) print /a 0x123456
$3 = 0x123456<_initialize_vx + 369>
6.继续执行命令使用到 finish 命令和 continue 命令。finish 和 continue 的区别:
finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息
continue [ignore-count] :恢复程序运行,直到程序结束或是下一个断点到来。ignore-count 表示忽略其后的断点次数。continue,c,fg三个命令意思相同。
7.单步执行使用 next 与 step 命令,step与next的区别 :
step:一行一行执行,遇到函数时,调到函数内运行
next:一行一行执行,遇到函数时,调过函数运行,不会进入函数。
8.退出GDB调试工具使用命令:
quit
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23643.html