tutorial onlinegdb online compiler compilador c++ gdb

c++ - onlinegdb - online gdb python



Imprimir tablas C++ usando GDB (5)

Estoy tratando de imprimir vtable de un objeto usando gdb; Encontré el

show print vt bl on

configuración, pero todavía no sé cómo imprimir el objeto vtable - p * aún no lo imprime.

¿Cómo imprimo el vtable?


Una solución más compacta

p /a (*(void ***)obj)[0]@10


(gdb) set $i = 0 (gdb) while $i < 10 >print $i >p /a (*(void ***)obj)[$i] >set $i = $i + 1 >end

Donde "obj" es el objeto cuyo vtable le gustaría imprimir, y 10 es la cantidad de métodos.


¡En el gdb real 7.5.1 el comando no es información vtable!

Usa información vbl


Si tiene una versión suficientemente nueva de gdb, puede consultar el comando "info vtbl".

Solo noté la función al buscar en Google una respuesta a esta pregunta y noté publicaciones en la lista de correo de gdb alrededor de 2012, especialmente esta de marzo de 2012:

http://permalink.gmane.org/gmane.comp.gdb.patches/73957


Para el ejemplo en http://en.cppreference.com/w/cpp/language/virtual

Sin usar ''información vtbl''

(gdb) p b $1 = {_vptr.Base = 0x400a60 <vtable for Base+16>} (gdb) x/16x 0x400a60 0x400a60 <_ZTV4Base+16>: 0x0040094c 0x00000000 0x72654437 0x64657669 (gdb) x/16x 0x0040094c 0x40094c <Base::f()>: 0xe5894855 0x10ec8348 0xf87d8948 0x400a15be 0x40095c <Base::f()+16>: 0x10c0bf00 0xf9e80060 0xc9fffffd 0x485590c3 0x40096c <Derived::f()+2>: 0x8348e589 0x894810ec 0x1bbef87d 0xbf00400a 0x40097c <Derived::f()+18>: 0x006010c0 0xfffddbe8 0x66c3c9ff 0x00841f0f