GDB常用命令总结
ptype-------------------------------查看结构体定义
set print pretty on/off-------------设置结构体显示时的样子
show print pretty-------------------查看
show print sevenbit-strings---------查看字符显示
set print sevenbit-strings on/off-设置
p $eip------------------------------查看寄存器
info registers----------------------查看除浮点寄存器以外的全部寄存器
info all-registers------------------查看全部寄存器
where-------------------------------查看程序当时运行位置(即执行到哪行)
info threads----------显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。
thread ID----------------------------------------------切换当前调试的线程为指定ID的线程。
break thread_test.c:123 thread all---------------------在所有线程中相应的行上设置断点
thread apply ID1 ID2 command---------------------------让一个或者多个线程执行GDB命令command。?
thread apply all command-------------------------------让所有被调试线程执行GDB命令command。
set scheduler-locking on-------------------------------设置只调试当前线程
help list-----------------------------------查看list命令帮助
list----------------------------------------查看当前行附近10行,再次执行查看后10行
list----------------------------------------查看当前行的前10行
list linenum--------------------------------查看第linenum行附近10行?
list numbegin,numend------------------------查看第numbegin行到第numend行
list function-------------------------------查看function函数附近10行
list file:linenum---------------------------查看file文件第linenum行附近10行
list file:function--------------------------查看file文件function函数附近10行
list *address-------------------------------查看地址为address的符号附近的10行
break linenum--------------------------------在当前源文件的第linenum行设置断点
break function-------------------------------在function函数入口处设置断点
break file:linenum---------------------------在file文件的第linenum行设置断点
break file:function--------------------------在file文件的function函数入口处设置断点
break class::function------------------------在类class的function函数入口处设置断点
break namespace::class::function-------------在命名空间为namespace的类class的function函数的入口处设置断点
info break-----------------------------------查看断点信息
run---------------------------------运行程序,可简写为r
next--------------------------------单步跟踪,函数调用当作一条简单语句执行,可简写为n
step--------------------------------单步跟踪,函数调进入被调用函数体内,可简写为s
finish------------------------------退出函数
until-------------------------------在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u
continue----------------------------继续运行程序,可简写为c
stepi或si, nexti或ni ---------------单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令
info program------------------------来查看程序的是否在运行,进程号,被暂停的原因
print-------------------------------打印变量、字符串、表达式等的值,可简写为p?
p count-----------------------------打印count的值?
p cou1+cou2+cou3--------------------打印表达式值
print----------接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,表达式可以是当前程序运行中的const常量、变量、函数等内容。但是GDB不能使用程序中定义的宏。
命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示输出三个单位,u表示按十六进制显示,如:
x/4uw 45
输出格式
一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
检查程序内存泄漏工具 valgrind ,例如:
valgrind --tool=memcheck --leak-check=yes --leak-check=full --track-origins=yes --show-reachable=yes entryMain