2009-08-26 4 views
10

Recientemente, recibí un archivo de volcado de un cliente. Podría rastrear el problema hasta una clase que podría contener datos incorrectos, pero solo obtuve un puntero a la clase, no un puntero real (el puntero void provenía de una propiedad de ventana, por lo tanto, era un puntero de vacío) . Por desgracia, la clase a la que me quería a emitir el puntero, se encontraba en un espacio de nombres en el anonimato, como esto:Depuración de datos en 'espacios de nombres anónimos' (C++)

namespace 
    { 
    class MyClass 
     { 
     ... 
     }; 
    } 

... 
void *ptr = ... 
// I know ptr points to an instance of MyClass, 
// and at this location I want to cast ptr to (MyClass *) in the debugger. 

El uso de "PTR" de la ventana de inspección si Visual Studio 2005 demuestra el valor del puntero. Si utilizo "(MyClass *) ptr", el depurador me dice que no puede convertirlo.

¿Cómo puedo convertir el ptr a un puntero de MyClass?

Nota: Eventualmente podría usar un espacio de nombre con nombre tonto (como el nombre del archivo fuente), y luego usar un "uso de espacio de nombres", pero esperaría mejores soluciones.

+1

Btw, VS 2008 presenta el mismo problema. Yo recomendaría enviar una nota a los mismísimos MS. – gimpf

Respuesta

8

Esto se menciona en MSDN. No parece que haya una buena solución dentro de la ventana de observación (supongo que puede obtener el nombre de su clase decorado de una lista).

Su idea de "espacio de nombres tonto" funcionaría bien, también podría declarar una clase idéntica con un nombre tonto y emitir para ese tipo en su lugar.

Cuestiones relacionadas