查看运行时数据
1. print 命令
打印变量值
usage: print [/f] <expression>
# /f 是指明输出格式,与c语言的格式符类似,具体可查看帮助 # 在表达式中,gdb支持"::,@ "操作符 #:: 为全局作用域符 #@ 连续内存操作符 #{type} <addr> 内存类型操作符
(gdb) p i #查看本地变量i的值
(gdb) p ::i #查看全局变量i的值
(gdb) p "file.c"::i #查看文件file.c中的全局变量i的值(static)
(gdb) p *arr@6 #假设声明 int arr[3], 该命令输出 {65,66,67}
(gdb) p arr@6 #这跟前面的命令不同,它打印 {{65,66,67},{6972112, -1080405392, -1080405304}, # {7122412, 7019680, 134514032}},明显不是想要的
(gdb) p {char} &arr[0] # 把地址 &arr[0]的数据按char显示,该例子中会打印 'A'
(gdb) p /c arr[0] # 与上一命令等价,打印 'A'
|
2. examine 命令
查看内存内容
usage: x /[nfu] <addr> # n,f,u 是可选参数,意义如下:
# n - 要查看的内存单元数目
# f - 查看格式,支持print命令中的格式,同时支持/s (字符串),/i (指令内存)
# u - 一个内存单元的大小,默认为4字节. b,h,w,g 分别表示1,2,4,8个字节
(gdb) x /3uh 0x12345678 #从地址 0x12345678 读取三个单元的数值,每个单元为双字节
(gdb) x /i $pc #查看当前指令, $pc为gdb的环境变量,表示当前指令的地址
|
3. display 相关命令
自动显示变量值,通常用作设置在程序停住时查看某些变量的值
usage:display <expr> display /f <expr> display /f <addr> usage:info display #查看设置的自动显示,每一个都有一个编号
usage: undisplay <N> delete display <N> #删除编号为 N 的自动显示, 多个可以用空格格开
usage:disable display <N> # 禁用, 不删除
enable display <N> # 启用 # f - 同 x 命令的格式
|
4. info all-registers命令
查看寄存器的内容
usage: info all-registers #查看所有寄存器的内容
usage: info registers #查看除浮点寄存外的寄存器
info registers <reg-name> #查看指定名字的寄存器
|
阅读(4654) | 评论(0) | 转发(0) |