天天看点

gdb工具常用命令

gdb下调试程序:

编译时加“-g”,否则无调试信息

set args 给main函数设置参数值;

show args 启动后查看设置的参数

show environment [varname]查看环境变量([varname]表示可选项,不写则显示全部的环境变量)

set environment varname [=] value 修改环境变量

run > outfile 将输出重定向到文件

info proc status/all 查看程序的状态信息,包含函数地址,进程号,线程等等

调试多线程:

info threads 列出所有的线程信息

依次列出的内容为:线程号,线程ID,堆栈信息,其中"*"所在行为当前gdb所在线程

thread threadno 切换线程

设置断点:

break(b) linenum  在某行设置断点

break filename:linenum 在某个文件某行设置断点

break function(class::function)在某个函数名(或类里的方法名)设置断点,(function表示函数名)

清除断点:

clear function

clear line (根据断点行号来清除)

delete line (根据断点的num来清除,使用info breakpoint可以查看所有断点信息)

delete break (清除所有断点)

显示所有的断点

info breakpoint

执行:

step conut   执行到某行(也可用来进入某个函数内部)

next    按步往下执行

finish  执行完当前函数

查看堆栈信息:

backtrace(bt)打印当前函数调用栈的信息

backtrace n   (n>0)表示只打印栈顶上n层的调用栈的信息

(n<0)表示只打印栈底下n层调用栈的信息

说明:一般来说,最顶层的栈就是当前栈,0表示栈顶,1就是栈的第二层。如果想看栈下面详细信息就切换当前栈。

切换堆栈:

frame n (或f n)切换到某一层堆栈,n是一个从0开始的整数,是栈中的层编号。比如:frame 0,表示栈顶,frame 1,表示栈的第二层。

frame addr(栈地址) 

up n 表示向栈的上面移动n层

down n   表示向栈的下面移动n层 不写n值,表示移动一层

查看当前栈的详细信息:

frame 或f 会显示当前函数名,函数参数值,函数所在文件及行号,函数执行到的语句

info frame(或info f) 会显示出更为详细的信息 

info frame n 显示某层栈的详信息

info args 查看新参栈信息

info locals 查看当前栈变量信息

查看源文件:

list linenum

list function

list first,last

查看数据:

print varname   打印变量值

print /x varname  按照16进制打印结果

/o 8进制输出结果

/f float输出结果

修改运行程序的值

set var varname = value   设置varname的值为value

查看命令历史记录

show history

show commands

gdb基本命令概述:

backtrace(bt): 查看堆栈情况

finish: 执行完当前函数,等待下个命令

list 行号:列出源代码

next: 执行下一句语句

print: 打印表达式值

set var: 修改变量的值

start: 开始执行程序,并在main函数的第一个语句等待命令与run不同,run不会等待

step: 执行下一行语句,如果执行函数,那么跳到函数里执行

break 行号:设置断点

continue: 从当前位置开始连续执行,直到遇到断点停下,否则执行完

disable breakpoint : 禁用所有断点

enable breakpoint: 启用所有断点

display 变量名:跟踪一个标量,每次停下来都会显示它的值

undisplay : 取消先前设置跟踪的那些变量。

继续阅读