2009-08-26 11 views
10

Recentemente, ho ricevuto un file di dettagli arresto anomalo da un cliente. Ho potuto rintracciare il problema in una classe che poteva contenere dati non corretti, ma ho solo ottenuto un puntatore void alla classe, non un vero puntatore (il puntatore void proveniva da una proprietà window, quindi era un puntatore void) . Purtroppo, la classe a cui ho voluto lanciare il puntatore, era in uno spazio dei nomi anonima, in questo modo:Debug dei dati in "namespace anonimi" (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. 

Utilizzando "PTR" nella finestra di controllo se Visual Studio 2005 dimostra il valore del puntatore. Se uso "(MyClass *) ptr", il debugger mi dice che non può eseguire il casting su di esso.

Come posso trasmettere il ptr a un puntatore MyClass?

Nota: potrei infine utilizzare uno spazio dei nomi con lo stesso nome (come il nome del file di origine), quindi utilizzare un "namespace", ma mi aspetterei soluzioni migliori.

+1

Btw, VS 2008 presenta lo stesso problema. Consiglierei di mandare a loro volta la MS. – gimpf

risposta

8

Questo è menzionato in MSDN. Non sembra che ci sia una bella soluzione all'interno della finestra di controllo (è possibile ottenere il nome decorato della classe da un elenco che immagino).

La tua idea di "spazio dei nomi di silly-name" funzionerebbe bene, potresti anche solo dichiarare una classe identica con un nome stupido e trasmettere a quel tipo invece.