【问题标题】:Why gdb casting is not working?为什么 gdb 铸造不起作用?
【发布时间】:2011-01-04 13:57:34
【问题描述】:

我使用print (CEthPacket*) 0xeb609a0检查给定地址的对象并得到A syntax error in expression, near ') 0xeb609a0'.

我做错了什么?

编辑: CEthPacket 是一个 C++ 类,我在 gdb Fedora (6.8-37.el5) 上。

【问题讨论】:

    标签: gdb


    【解决方案1】:

    我刚遇到类似的问题,从我的一位同事那里得知,您需要在单引号内提供该类所属的命名空间,如下所示:

    (gdb) p ('MyScope::MyClass'*) ptr; 
    

    【讨论】:

    • 那么模板呢?例如,我如何告诉 gdb 这个值是 std::vector<int>*
    • @ulidtko 我发现最好的方法是使用损坏的名称。我制作了a separate Q&A,我说的仅此而已。
    【解决方案2】:

    你没有说在哪个平台上,哪个版本的 GDB,或者CEthPacket 是什么。

    我的第一个猜测是你应该尝试print (struct CEthPacket *) 0xeb609a0

    【讨论】:

      【解决方案3】:

      您的起始命名空间也是当前堆栈中的命名空间。如果你想从 root 开始,你必须使用 ::NS1::NS2::Obj。

      【讨论】:

        【解决方案4】:

        我刚刚遇到了一个非常相似的错误。这是因为我试图引用一个未在当前堆栈框架范围内定义的对象。尝试更改为定义了 CEThrPacket 对象的堆栈帧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-27
          相关资源
          最近更新 更多