2010-10-27 32 views
6

Trong một trò chơi mà tôi mod cho họ gần đây đã thực hiện một số thay đổi đã phá vỡ một thực thể cụ thể. Sau khi nói chuyện với một người đã tìm ra một sửa chữa cho nó, họ chỉ thông tin họ đã cho tôi là họ "vá nó" và sẽ không chia sẻ nữa.Dumping nội dung bộ nhớ của một đối tượng

Tôi cơ bản cố gắng nhớ cách kết xuất nội dung bộ nhớ của đối tượng lớp khi chạy. Tôi mơ hồ nhớ làm điều gì đó tương tự như trước đây, nhưng nó đã được một thời gian rất dài. Bất kỳ giúp đỡ về việc nhớ làm thế nào để đi về điều này sẽ được đánh giá cao nhất.

Trả lời

6
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"); 
} 
+0

Cảm ơn bạn, đây chính xác là những gì tôi đang tìm kiếm. –

+0

Xin lưu ý rằng điều này chỉ hoạt động nếu đối tượng không chứa con trỏ đến bộ nhớ ở nơi khác. – doron

+1

Ngoài ra, nếu bạn chuyển một con trỏ 'Base *', nó sẽ không in toàn bộ đối tượng 'Derived', chỉ là phần' Base'. – MSalters

2

Vâng, bạn có thể reinterpret_cast ví dụ đối tượng của mình dưới dạng một mảng char và hiển thị.

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]) << " "; 
} 

Đây là điều xấu nhưng nên hoạt động.

Dù sao, xử lý nội bộ của một số triển khai thường là không phải là ý tưởng hay.

Các vấn đề liên quan