Из этой ссылки gdb интерпретировать адрес памяти как объект мы знаем, что если объект класса A имеет определенный адрес, такой как 0x6cf010, то мы можем использовать:
(gdb) p *(A *) 0x6cf010
для печати элементов элемента этого объекта.
Однако, похоже, это не работает, когда используется пространство имен С++. То есть, если объект класса типа A:: B, то все следующие попытки не работают:
(gdb) p *(A::B *) 0x6cf010
(gdb) p *((A::B *) 0x6cf010)
Итак, кто знает, как печатать элементы объекта в этих условиях?
Мы можем использовать следующий преднамеренный код ядра, чтобы попытаться напечатать элементы p из адреса (мы можем использовать "локаторы информации" для отображения адреса).
#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;
}