【问题标题】:Variable name conflict with GDB debugger变量名与 GDB 调试器冲突
【发布时间】:2010-02-11 20:18:50
【问题描述】:

我正在 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 关键字来检查那里的内存......至少在不花一些时间来破译原始二进制文件的情况下是这样的代表。

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

【问题讨论】:

  • 你能粘贴更多你的 gdb 交互吗?我只能用明显错误的 C++ 语法重现你的错误。
  • m_data(第二个)的类型是什么?

标签: c linux debugging gdb


【解决方案1】:

问题不是你想的那样——如果我调试以下代码:

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

我可以在第三行打断说:

(gdb) print list

这给了我:

$1 = 666

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多