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 : 取消先前设置跟踪的那些变量。