参见英文答案 >
Why gdb casting is not working?3
从这个链接
gdb interpret memory address as an object
我们知道,如果A类的对象处于特定的地址,如0x6cf010,那么我们可以使用:
从这个链接
gdb interpret memory address as an object
我们知道,如果A类的对象处于特定的地址,如0x6cf010,那么我们可以使用:
(gdb) p *(A *) 0x6cf010
打印此对象的成员元素.
但是,当c命名空间涉及时,这似乎不起作用.也就是说,如果类型为A :: B的对象,则所有以下尝试都不起作用:
(gdb) p *(A::B *) 0x6cf010 (gdb) p *((A::B *) 0x6cf010)
那么,谁知道如何在这个条件下打印对象元素?
我们可以使用以下故意的核心代码尝试从地址打印p的成员(我们可以使用“info locals”显示地址).
#include <stdio.h> namespace A { class B { public: B(int a) : m_a(a) {} void print() { printf("m_a is %d\n",m_a); } private: int m_a; }; } int main() { A::B *p = new A::B(100); p->print(); int *q = 0; // Generating a core here *q = 0; return 0;
}
解决方法
为我工作:
g++ -g test.cpp -o test gdb test (gdb) break main (gdb) r Breakpoint 1,main () at test.cpp:22 22 A::B *p = new A::B(100); (gdb) n 24 p->print(); (gdb) n m_a is 100 26 int *q = 0; (gdb) p p $1 = (A::B *) 0x602010 (gdb) p (A::B *) 0x602010 $2 = (A::B *) 0x602010 (gdb) p *((A::B *) 0x602010) $3 = {m_a = 100}
它适用于我你使用什么(gcc版本,操作系统,编译标志?)