2011-03-21 20 views
12

Estoy investigando un bloqueo, en función del volcado del núcleo disponible. La falla de la aplicación es un programa en C++, creado con gcc y ejecutándose en RH5. La traza inversa parece válida hasta el marco # 1. Estoy tratando de imprimir un objeto Obtengo <invalid address>, <error reading variable> Como tengo la dirección del objeto del marco n. ° 2, es una presunción válida de que de alguna manera puedo "volcar" la memoria en la que se asigna el objeto y aun así recopilar información. Además, en lugar de tratar de adivinar cómo se alinea el objeto, ¿puedo forzar a gdb a imprimir la dirección como si fuera un objeto, aunque detecta algún error? Mi idea es que tal vez el objeto ya se haya eliminado, pero tal vez la memoria aún esté allí y pueda imprimir alguna variable miembro.gdb interpretar la dirección de memoria como un objeto

Por favor comente que es posible, y si es así, cómo se debe hacer en términos de gdb. 10x.

+3

No está seguro de si va a trabajar, pero se puede tratar de impresión '* ((Obj *) Dirección)'. A veces me funciona. – JaredC

Respuesta

18

Bueno, si usted tiene una dirección siempre se puede hacer:

print *(class MyClass*)pointer_var

+0

Bueno he intentado imprimir esa manera '(BGF) p (clase MiClase *) m_pointer' pero me da ' Ningún tipo de estructura que se llama MyClass' Parece que el BGF no sé de mi clase. –

+0

@Yordan Por supuesto, tiene que transmitir a la estructura que desea imprimir. –

+0

@Let_Me_Be ¿Qué quieres decir? No es lo que hace la parte '(class MyClass *)'. –

Cuestiones relacionadas