Mam wersję debugowania programu (VM JavaScript V8) i chcę zrozumieć, jak instancje niektórych klas są rozmieszczone w pamięci. Mogę konstrukcje całkiem-print, takie jak ten:Jak mogę zobaczyć, jak klasa C++ rozłożona jest w pamięci za pomocą 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
}
}
ale chcę wiedzieć, gdzie te różne członkowie (bloki, entered_contexts, etc.) są fizycznie względem początku obiektu. W systemach opartych na Solaris, MDB może zrobić dla struktur C tak:
> ::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
}
W tym przykładzie, każde pole jest poprzedzona jego przesunięcie od początku struktury. Chcę zrobić to samo dla klas C++. gdb musi mieć te informacje, aby wydrukować członków struktury, ale czy jest jakiś sposób, aby go wyświetlić?
Czy istnieje inny sposób wykonania tej czynności dla uruchomionego programu?
Dziękuję. Wygląda to bardzo interesująco. –