在同一过程中,当使用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。 该变量已初始化,不再更改。
@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;”,而不是重新定义它?