Tengo una compilación de depuración de un programa (la máquina virtual de JavaScript V8) y quiero entender cómo se presentan instancias de ciertas clases en la memoria. Puedo estructuras bastante-impresión como esta:¿Cómo puedo ver cómo se distribuye una clase de C++ en la memoria con 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
}
}
pero yo quiero saber dónde esos diversos miembros (bloques, entered_contexts, etc.) son físicamente, con respecto al inicio del objeto. En sistemas basados en Solaris, MDB puede hacer esto por C estructuras de este modo:
> ::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
}
En este ejemplo, cada campo se prefija con su desplazamiento desde el inicio de la estructura. Quiero hacer lo mismo para las clases de C++. gdb tiene que tener esta información para imprimir los miembros de la estructura, pero ¿hay alguna forma de verla?
Alternativamente, ¿hay alguna otra manera de hacer esto para un programa en ejecución?
Gracias. Esto se ve muy interesante. –