【问题标题】:GDB unused variableGDB 未使用的变量
【发布时间】:2011-11-21 00:22:08
【问题描述】:

是否可以使用 GDB 获取未使用变量的值? GCC 是否有一些配置,以便未使用变量的垃圾值将显示为未“优化”?

c 文件:

#include<stdio.h>

void main()
{
    int x;
    int y;
    printf("value of x: %d",x);

}

在gdb中我想得到变量y的垃圾值。

(gdb) run
Starting program: /home/charmae/workspace/AVT/a.out 

Breakpoint 1, main () at file4.c:7
7       printf("value of x: %d",x);
(gdb) info locals
x = 2789364
(gdb) p y
$1 = <optimized out>
(gdb) p x
$2 = 2789364

【问题讨论】:

  • 我曾尝试使用“gcc -O0 -g file.c”进行编译,但它不起作用。
  • 与其说“它不起作用”,不如告诉我们发生了什么?
  • @JohnZwinck 得到了与上面提到的相同的输出..

标签: c variables gcc gdb trace


【解决方案1】:

它与 GDB 无关。优化该变量的实体是编译器(在您的情况下可能是 GCC)。您可以通过将变量声明为 volatile 来强制它保留它

一个更好的问题是 - 你为什么要这样做?

【讨论】:

  • 我正在制作程序可视化,我需要声明变量的值....我只是想知道是否将未使用的声明变量分配给内存,如果是,那么变量应该有一个值..
  • 如果编译器已经优化了变量 out 然后没有 - 他们没有在内存中分配存储空间,所以没有价值。
【解决方案2】:

这与 gcc 无关。编译器要么编译了代码来维护这个值,要么没有。

【讨论】:

    【解决方案3】:

    您可以添加y=y; 语句。这将强制使用y,并使用gcc -O0 -g 跟踪它(至少在我的Linux/Debian/Sid/AMD64 上使用gcc 4.6.2gdb 7.3.50

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多