如何在此处修改此变量的值

时间:2011-11-08 13:38:57

标签: c linux gcc gdb x86

好的,我有来自SPLASH2的这个基准测试,我用它来测试我创建的工具。基准测试具有以下结构。

typedef struct _interact {
    struct _interact *next ;          /* Next entry of the list */
    Element *destination ;            /* Partner of the interaction */
    float   formfactor_out ;          /* Form factor from this patch  */
    float   formfactor_err ;            /* Error of FF */
    float   area_ratio ;          /* Area(this) / Area(dest) */
    float   visibility ;          /* Visibility (0 - 1.0) */
} Interaction ;

查看代码,我发现从未使用 area_ratio 。但是,最后,我发现 area_ratio 的值不是0,因为它在开头。所以我在这个变量上设置了一个观察点,并且令人惊讶地 gdb 向我指出了修改可见性的代码( area_ratio 下方的变量)。

现在我的问题是为什么会发生这种情况。如何通过修改可见性来修改 area_ratio 。有什么可能性?任何线索?我真的很困惑。请注意,我正在64位计算机上测试我的程序。也许64位必须用它做点什么,但我不知道!

代码是这样的:

/* Create links and finish the job */
inter = get_interaction(process_id) ;
*inter = i12 ;
inter->visibility = VISIBILITY_UNDEF ; // <---- This is what gdb is pointing to

1 个答案:

答案 0 :(得分:2)

啊,我明白了!实际上发生的是 i12 是一个局部变量,它没有初始化为0,当我们执行 * inter = i12; 时, area_ratio i12 分配给 * inter ,因为 i12 area_ratio 是随机的,不一定0, area_ratio 的值被分配给 * inter

顺便说一句,现在我已经意识到 gdb 显示了预期行下方的行号,因此它没有指向行 inter-&gt; visibility = VISIBILITY_UNDEF ,但行 * inter = i12 ;