变量名称与GDB调试器冲突

时间:2010-02-11 20:18:51

标签: c linux debugging gdb

我在Linux上用GDB调试C ++程序,我需要在程序运行时看到成员变量的值。遗憾的是,成员变量名为list,恰好是GDB关键字。所以,当我尝试:

print m_operations.m_data[10].m_data.list

我明白了......

A syntax error in expression, near list'.

我尝试了各种各样的事情来向GDB表明我正在输入一个文字表达式,比如在变量名称周围加上双引号或单引号,但它只会导致更多的语法错误。我查看了GDB手册,找不到任何解决方法。我无法重命名成员变量,因为我无权修改该类。此外,list是一个C ++对象,而不是常规整数或POD,所以我不能简单地使用x关键字来检查那里的内存......至少在没有花费一些时间进行解密的情况下原始二进制文件代表什么。

那么,有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

问题不在你的想法 - 如果我调试以下代码:

int main() {
    int list = 666;
    while( list ) {
        list--;
    }
}

我可以在第三行打破并说:

(gdb) print list

给了我:

$1 = 666

您尝试打印的表达式必定存在其他问题。您是否尝试过使用GUI调试器,例如DDD,它允许您通过单击鼠标来选择要打印的内容?

答案 1 :(得分:1)

这很可能是GDB中的错误(或可能在GCC中)。

首先尝试最新的GDB(7.0.1)。

如果失败,请尝试创建一个简单的独立测试用例,并在GDB bugzilla中提交错误。如果你这样做,确保告诉你使用哪个版本的GCC来编译你的测试。