GDB调试器的使用
时间:2022-03-10 17:55
http://blog.chinaunix.net/uid-23193900-id-3184605.html
- 1.数据观察命令
- (gdb)print <variable-name>
- 在GDB中,可以查看全局变量、静态局部变量、当前作用域有效的局部变量。如果局部变量与全局变量冲突,而需要查看全局变量的值,可以使用“::”操作符
- (gdb)print <file::variable>
- (gdb)print <function::variable>
- 如:
- (gdb)print ‘main.c‘::a
- 2.对程序中函数的调用
- 调用函数时指定形参的值
- (gdb)print func(arg1,arg2,...)
- 3.查看表达式的值
- (gdb)print <expression>
- 4.查看数组的值
- (gdb)print <array-name>
- gdb中@操作符的使用:
- (gdb)print *array@len
- array是一段连续的内存空间的起始地址,len是需要查看内存的长度。
- array可以是数组,也可以是动态分配的堆区间。
- 如果是静态数组,直接:
- (gdb)print 数组名
- 就能显示全部数据
- 5.查看内存
- examine命令,可以让用户查看指定内存中的值
- (gdb)examine /nfu <address>
- 参数:
- n:一个正整数,表示显示几个单位的内存
- f:显示的格式,进制(u十六进制)或字符串(s)或指令(i)
- u:单位,b=1 字节, h=2 字节,w=4字节,g=8 字节。
- 6.查看寄存器
- (gdb)info registers
- (gdb)info all-registers
- (gdb)info registers-name
- 7.自动显示变量
- 使用display命令,可以在程序单步执行或遇到断点时,自动显示变量值。
- (gdb) display/fmt expr
- 参数:fmt,可以是 十六进制(x),十六无符(u)
- 十进制(d) 八(o) 二进制(t) 字符格式(c) 浮点格式(f)
- info display可以查看display设置的自动显示的信息。
- undisplay删除自动显示。disable与enable也适用于该命令。
5.使用GDB跟踪栈上数据(栈中数据都是局部变量)
每个函数和它的变量都有一个栈帧-frame,当前栈帧总是frame 0。所有这些frame形成一个程序完整的运行栈。可以使用backtrace命令打印栈帧的信息。
命令:
(gdb)bt
如果在main函数里调用了func()函数,此时正在执行func()函数,这时的栈帧frame 0 就是func()函数的。
使用命令info locals 打印的变量就是当前栈帧的。
如果要查看main()函数的栈帧中的局部变量,可以使用命令"(gdb) frame 1 "进行切换。
GDB调试器的使用,布布扣,bubuko.com