为什么 gdb 命令 "info locals" 也打印未声明的变量?

Why gdb command "info locals" also print undeclared variable?

int a = 10;
if(a >= 5)
    printf("Hello World");
int b;
b = 3;

例如,我在执行第 4 行“int b;”之前命令“info locals”但是 gdb 打印变量 a 和 b 的信息。为什么 gdb 是这样工作的?我怎样才能只打印声明的变量?

gdb 显示 b 变量,因为它已被您的编译器声明

假设这段代码在函数内部,一旦执行流进入函数,它就会在堆栈中分配局部变量,这就是 a 和 b 值所在的位置。那是因为编译器会读取您的代码并在开头进行所有声明,即使它们尚未在您的函数之上声明。

看看

这取决于编译器决定编译代码的方式。 在您的情况下,我相信由于变量 b 将始终在您的代码中使用,因此编译器可能会同时“声明” ab 以优化执行时间。

如果你真的想了解发生了什么,请反汇编程序并查看执行此代码时实际运行的程序集。 我假设您会发现在堆栈帧上为变量 b 分配 space 的指令为两个变量(ab 分配了 space ) 同时。