我有一個程序的調試版本(V8 JavaScript VM),我想了解某些類的實例是如何在內存中佈局的。我幾乎可以打印的結構是這樣的:如何查看C++類如何在內存中使用gdb進行佈局?
(gdb) print thread_local
$6 = {
blocks_ = {
data_ = 0x868ceb0,
capacity_ = 7,
length_ = 1
},
entered_contexts_ = {
data_ = 0x868d828,
capacity_ = 1,
length_ = 1
},
saved_contexts_ = {
data_ = 0x868d838,
capacity_ = 1,
length_ = 1
},
spare_ = 0x0,
ignore_out_of_memory_ = false,
call_depth_ = 1,
handle_scope_data_ = {
next = 0x0,
limit = 0x0,
level = 0
}
}
,但我想知道這些不同的成員(塊,entered_contexts等)都是物理,相對於對象的開始。上基於Solaris的系統,MDB可以爲C的結構做到這一點,像這樣:
> ::print -at port_event_t
0 port_event_t {
0 int portev_events
4 ushort_t portev_source
6 ushort_t portev_pad
8 uintptr_t portev_object
10 void *portev_user
}
在該示例中,每個字段的前綴從所述結構的開始其偏移量。我想爲C++類做同樣的事情。 gdb必須擁有這些信息才能打印出結構成員,但有什麼方法可以查看它嗎?
或者,有沒有其他方式可以爲正在運行的程序執行此操作?
謝謝。這看起來很有趣。 –