使用“info Variables”和“print”命令时 GDB 中的变量值不一致

问题描述 投票:0回答:1

在同一过程中,当使用GDB调试并检查变量grpc_client_handle_msg时,我首先使用info Variables命令,然后打印其值,获得正常值:

#gdb attach 100
(gdb) info variables grpc_client_handle_msg
All variables matching regular expression "grpc_client_handle_msg":
File lib/grpc.c:
21:    P_GRPC_CLIENT_HANDLE_MSG *grpc_client_handle_msg;
Non-debugging symbols:
0x000000000096c698  grpc_client_handle_msg
(gdb) p grpc_client_handle_msg
$1 = (P_GRPC_CLIENT_HANDLE_MSG *) 0x773c000
(gdb)

但是,当我第一次打印它的信息,然后使用 info Variables 命令时,该值为 0x0:

#gdb attach 100
(gdb) p grpc_client_handle_msg
$1 = (P_GRPC_CLIENT_HANDLE_MSG *) 0x0
(gdb) info variables grpc_client_handle_msg
All variables matching regular expression "grpc_client_handle_msg":
File lib/grpc.c:
21:    P_GRPC_CLIENT_HANDLE_MSG *grpc_client_handle_msg;
(gdb) p grpc_client_handle_msg
$2 = (P_GRPC_CLIENT_HANDLE_MSG *) 0x0
(gdb)

这两次操作过程中,没有人故意修改该值。

我尝试了10次,当先使用info变量时,变量值始终为0x773c000,当先使用print时,变量值始终为0x0。 该变量已初始化,不再更改。

c gdb
1个回答
0
投票

@ssbssa

是的,它们是两个不同的变量,我打印变量的地址。 当我首先输入变量信息时,地址是

(gdb) p &grpc_client_handle_msg
$2 = (P_GRPC_CLIENT_HANDLE_MSG **) 0x96c698 <grpc_client_handle_msg>

但是当我第一次打印时,地址是

(gdb)p &grpc_client_handle_msg
$2 = (P_GRPC_CLIENT_HANDLE_MSG **) 0x7fd42e28af98 <grpc_client_handle_msg>

但是为什么呢?我只是“extern P_GRPC_CLIENT_HANDLE_MSG *grpc_client_handle_msg;”,而不是重新定义它?

© www.soinside.com 2019 - 2024. All rights reserved.