从这个链接 gdb解释内存地址作为对象, 我们知道,如果类类型A的对象在特定地址(如0x6cf010),那么我们可以使用:
(gdb) p *(A *) 0x6cf010
Run Code Online (Sandbox Code Playgroud)
打印此对象的成员元素.
但是,当涉及到c ++命名空间时,这似乎不起作用.也就是说,如果类类型为A :: B的对象,则以下所有尝试都不起作用:
(gdb) p *(A::B *) 0x6cf010
(gdb) p *((A::B *) 0x6cf010)
Run Code Online (Sandbox Code Playgroud)
那么,谁知道如何在这种条件下打印对象元素?
我们可以使用以下有意的核心代码来尝试从地址打印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;
Run Code Online (Sandbox Code Playgroud)
}