GDB备忘录
选项:
gdb -q 没有GUNblabla一大堆介绍
gdb -tui 这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p.
命令:
Ctrl + L——刷新窗口
display 表达式——在单步运行时非常有用,用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如 display a
watch 表达式——设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
kill——将强行终止当前正在调试的程序
run——运行
backtrace——生成函数树,也可以用bt
list ——简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
list 行号——将显示当前文件以“行号”为中心的前后10行代码,如:list 12
list 函数名——将显示“函数名”所在函数的源代码,如:list main
list ——不带参数,将接着上一次 list 命令的,输出下边的内容。
注意 :如果运行list 命令得到类似如下的打印,那是因为在编译程序时没有加入 -g 选项:
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/start.S
print ——打印任何合法表达式的值
print exp@n——打印从exp开始的n个值
whatis——变量类型
break filename:linenum
break filename:funcname
break linenum if expr
break funcname if expr——设置断点
info breakpoints——查看断点
delete n——撤销n号断点
disable n——使n号断点无效
enable n——使n号断点生效
ptype s——查看结构体s的定义
set variable varname = value——改变一个变量的值
step——单步跟踪
next——执行完整个函数
continue——继续执行
call name(args)——调用并执行名为name,参数args的函数
finish——中止当前函数并打印他的返回值
return——停止执行当前函数,并将value返回给调用者
print 'filename'::varname——打印源文件的变量值
print &funcname::varname——打印函数的变量值
up——调用栈上移一个函数调用
down——调用栈下移一个函数调用
search <string>——在当前文件中定位字符串的下一次出现
reverse-search <string>——在当前文件中定位字符串的上一次出现
shell command——不离开GDB就能执行shell命令
启动GDB:gdb filename PID——将GDB附加到一个正在运行的程序上
detach——把GDB从进程中分离出来
file filename
attach PID——指定运行在进程中的程序名,将GDB附加到一个运行的程序上
set args 参数——指定运行时的参数
show args——查看设置好的参数
show paths——查看程序运行路径;
set environment varname [=value] 设置环境变量。如:set env USER=hchen;
show environment [varname] 查看环境变量;