2010-04-06 1 views
4

J'ai un grand projet de C/C++ mixte. J'ai créé simple Visualiseur pour la classe ICU UnicodeString comme suit ...Création d'un visualiseur VS2008 simple à l'intérieur de autoexp.dat (problème de casting)

[inside autoexp.dat] 
icu_4_2::UnicodeString { 
     preview  ([$c.fUnion.fFields.fArray,su]) 
} 

... et qui fonctionne bien. Dans le débogueur, partout où je vois l'objet, je vois maintenant le texte à l'intérieur de la ligne d'aperçu.

J'ai ensuite créé une classe d'emballage contenant un de ces objets comme suit ...

class StringHandleData 
{ 
public: 
    icu_4_2::UnicodeString str; 
}; 

... puis a créé une autre Visualiseur pour cette ...

[inside autoexp.dat] 
StringHandleData { 
    preview  ([$c.str.fUnion.fFields.fArray,su]) 
} 

... ce qui encore, fonctionne bien. Chaque fois que je vois un objet StringHandleData dans le débogueur, je vois le texte à l'intérieur de la chaîne.

Cependant, mon problème vient quand je définir un typedef je peux utiliser à l'intérieur du code C comme ça ...

typedef void* StringHandle; 

... qui, sous le capot est en fait juste un PTR à un objet StringHandleData. Donc, quand je tente de créer un visualisateur pour le type StringHandle comme ça ...

[inside autoexp.dat] 
StringHandle { 
    preview  ([((StringHandleData)$c).str.fUnion.fFields.fArray,su]) 
} 

... ça ne fonctionne pas. J'ai essayé beaucoup d'autres façons de lancer l'objet, mais sans aucune chance jusqu'à présent. Si je vais à ma fenêtre de surveillance et lance un StringHandle comme ceci ... (StringHandleData *) stringHandle alors le débogueur rend le cast et les aperçus correctement - mais je n'arrive pas à le faire le faire automatiquement depuis l'intérieur d'autoexp .dat

Merci pour toute aide.

+0

Vous devez indiquer au débogueur de déréférencer le pointeur. Quelque chose comme '* (StringHandleData *)'. –

+0

Je pense que j'ai essayé presque toutes les combinaisons de *, &,. et -> sans succès. On se sent comme je l'utilise pour faire face à des erreurs de compilateur il y a 20 ans quand j'ai commencé à apprendre C. – user97150

Répondre

3

Le visualiseur Visual Studio est aveugle aux typedefs et pense que StringHandle est un void *.