您的当前位置:首页正文

gdb 笔记(06)— 查看当前函数参数、查看结构体/类的值、查看数组的值

2024-11-07 来源:个人技术集锦

1. 查看当前函数参数

当程序在函数中暂停后,即可查看函数的参数。语法如下:

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)

2. 查看/修改变量的值

在程序命中断点时,可以查看变量的值。这个变量可以是全局变量,也可以是局部变量,而且当前上下文能够访问的变量都可以查看。语法如下:

print 变量名 
# 或者
p 变量名

如果要修改查看到的变量值,可以使用下述命令:

print 变量名=

即如果要改变 x 变量的值,将它修改为 20,可以使用命令 p x=20 。对于结构体或者类对象,也可以使用这种方式修改成员的值,例如 p test->x=30p 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) 

2.1 使用gdb内嵌函数

在使用 print 或者 p 命令时,可以直接使用 gdb 内嵌的一些函数(比如 C 函数),比如 sizeofstrcmp 等,也可以使用一些常见的表达式。当使用内嵌函数时,通常不是查看某个变量的值,而是进行一些计算或者比较等操作。这样,就可以实时地查看一些信息。

比如,想了解 longLinux 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

2.2 查看结构体/类的值

2.3 查看数组

同样,使用 print 或者 p 命令也可以查看数组的信息。

Top