当程序在函数中暂停后,即可查看函数的参数。语法如下:
info args
或者
i args
使用示例
(gdb) b fun_test
Breakpoint 1 at 0x969: file demo.cpp, line 6.
(gdb) r
Starting program: /home/wohu/cppProject/book_debug/chapter_3.1/demo
ret is 8
Breakpoint 1, fun_test (a=10, str=0x555555554b21 "test") at demo.cpp:6
6 printf("a is %d, str is %s\n", a, str);
(gdb) info args
a = 10
str = 0x555555554b21 "test"
(gdb) i args
a = 10
str = 0x555555554b21 "test"
(gdb)
在程序命中断点时,可以查看变量的值。这个变量可以是全局变量,也可以是局部变量,而且当前上下文能够访问的变量都可以查看。语法如下:
print 变量名
# 或者
p 变量名
如果要修改查看到的变量值,可以使用下述命令:
print 变量名=值
即如果要改变 x
变量的值,将它修改为 20,可以使用命令 p x=20
。对于结构体或者类对象,也可以使用这种方式修改成员的值,例如 p test->x=30
、p node.ID=100
等。
完整示例过程
(gdb) p a
$1 = 10
(gdb) p str
$2 = 0x555555554b21 "test"
(gdb) p x = 20
No symbol "x" in current context.
(gdb) p a = 20
$3 = 20
(gdb) c
Continuing.
a is 20, str is test
Breakpoint 1, fun_test (a=10, str=0x555555554b21 "test") at demo.cpp:6
6 printf("a is %d, str is %s\n", a, str);
(gdb)
在使用 print
或者 p
命令时,可以直接使用 gdb
内嵌的一些函数(比如 C
函数),比如 sizeof
、strcmp
等,也可以使用一些常见的表达式。当使用内嵌函数时,通常不是查看某个变量的值,而是进行一些计算或者比较等操作。这样,就可以实时地查看一些信息。
比如,想了解 long
在 Linux gcc
下占用几个字节长度、某个结构体所占用的空间大小等,都可以使用sizeof
来计算。比如可以直接使用 p sizeof(long)
、p sizeof(NODE)
等。
(gdb) p sizeof(int)
$4 = 4
(gdb) p sizeof(long)
$5 = 8
(gdb) p sizeof(void*)
$6 = 8
(gdb) p 12 == 12
$7 = true
同样,使用 print
或者 p
命令也可以查看数组的信息。