在我玩的一个mod游戏中,他们最近做了一些改动,导致某个特定实例出现问题。在和解决方法的人交谈后,他们只告诉我他们“修复了它”,不愿透露更多信息。
我基本上试图想起如何在运行时转储类对象的内存内容。我依稀记得以前做过类似的事情,但已经很久了。如果有任何关于如何做到这一点的帮助,我将不胜感激。
我基本上试图想起如何在运行时转储类对象的内存内容。我依稀记得以前做过类似的事情,但已经很久了。如果有任何关于如何做到这一点的帮助,我将不胜感激。
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");
}
你可以将对象实例重新解释为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]) << " ";
}
这虽然不太好看,但应该能够正常工作。
总之,处理某些实现的内部通常不是一个好主意。
Base*
指针,它将不会打印完整的Derived
对象,只会打印Base
部分。 - MSalters