对象内存内容转储

7
在我玩的一个mod游戏中,他们最近做了一些改动,导致某个特定实例出现问题。在和解决方法的人交谈后,他们只告诉我他们“修复了它”,不愿透露更多信息。
我基本上试图想起如何在运行时转储类对象的内存内容。我依稀记得以前做过类似的事情,但已经很久了。如果有任何关于如何做到这一点的帮助,我将不胜感激。
2个回答

9
template <class T>
void dumpobject(T const *t) {
    unsigned char const *p = reinterpret_cast<unsigned char const *>(t);
    for (size_t n = 0 ; n < sizeof(T) ; ++n)
        printf("%02d ", p[n]);
    printf("\n");
}

请注意,仅当对象不包含指向其他内存的指针时,此方法才有效。 - doron
1
另外,如果您传递一个 Base* 指针,它将不会打印完整的 Derived 对象,只会打印 Base 部分。 - MSalters

2

你可以将对象实例重新解释为char数组并显示。

Foo foo; // Your object
 // Here comes the ugly cast
const unsigned char* a = reinterpret_cast<const unsigned char*>(&foo);

for (size_t i = 0; i < sizeof(foo); ++i)
{
  using namespace std;
  cout << hex << setw(2) << static_cast<unsigned int>(a[i]) << " ";
}

这虽然不太好看,但应该能够正常工作。

总之,处理某些实现的内部通常不是一个好主意


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接