小编Wor*_*eek的帖子

在gdb中,变量显示为<optimized out>,如何找到其值?

在gdb中,我如何发现显示为优化输出的变量的值?大概该值存储在一个寄存器中,我如何找出哪个?给出这个简单的程序(从下面的网站复制)。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int foo = rand();
    printf("foo is %d\n", foo++);
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

进行优化编译。

gcc -O3 -g optimized.c
gdb a.out
Run Code Online (Sandbox Code Playgroud)

运行GDB

(gdb) print foo
$1 = <optimized out>
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?该变量foo必须存在于某处,但如何找到它的值或将其存储在何处?

我找到了一个页面,该页面详细说明了DWARF调试信息如何用于优化代码https://undo.io/resources/gdb-watchpoint/build-for-debug-in-gdb。使用那里的建议,我最终可以找到分配给foo它的寄存器,但是这很痛苦。

如何让gdb告诉我要观看哪个寄存器?

我尝试使用-g3进行编译,但这没有帮助。

我在gdb中尝试了一些命令也没有帮助。

ptype foo
info locals
print &foo
Run Code Online (Sandbox Code Playgroud)

c optimization gdb dwarf

6
推荐指数
1
解决办法
89
查看次数

标签 统计

c ×1

dwarf ×1

gdb ×1

optimization ×1