Estoy depurando un programa C++ con GDB.¿Cómo determinar si un objeto es una instancia de cierta clase derivada de C++ de un puntero a una clase base en GDB?
Tengo un puntero a un objeto de cierta clase. El puntero se declara como de alguna clase superior que se extiende por varias subclases.
No hay campos en el objeto para especificar el tipo de clase exacto de este objeto, pero algunas funciones virtuales (por ejemplo, bool is_xxx()) se definen para indicar el tipo de clase en tiempo de ejecución.
Hay alguna forma de indicar el tipo de clase preciso de un objeto en GDB sin llamar a estas funciones virtuales. Llamar a tales funciones en GDB puede generar resultados confusos cuando el programa tiene múltiples subprocesos.
No soy un mago de GDB, pero que podría ser capaz de atravesar el puntero de tabla v (que es lo que su base de el puntero de clase está literalmente señalando) y resolver el nombre de las funciones. – selbie
@selbie consultar la tabla v es exactamente lo que hace pype bajo el capó si {set print object on} está activo, como señaló Beta en su respuesta –