2015-03-06 1 views
1

C++ je une hiérarchie de classes qui commence parAffichage type dynamique Débogueur Netbeans pour

class Command { ... } 

et a ensuite sous-classes

class RunCommand : public Command { ... } 

Dans le débogueur Netbeans, lors de l'affichage d'une variable de type Command * I aimeraient voir le type réel de la variable,

Command * command [RunCommand] 

puis être en mesure d'élargir le champ pour voir l'état. Est-ce possible?

Répondre

2

J'ai fait quelques recherches et il semble que NetBeans n'ait pas cette fonctionnalité intégrée.

Ne vous inquiétez pas! Vous pouvez obtenir le même effet en configurant un point de surveillance personnalisé pour la variable dont vous souhaitez connaître le type.

Le code que je vais débogage:

#include <typeinfo> 
#include <iostream> 
using namespace std; 
class Command { 
public: 
    virtual void bla() { 
     cout << "Base"; 
    } 
}; 
class RunCommand : public Command { 
public: 
    void bla() { 
     cout << "Child"; 
    } 
}; 
int main(int argc, char** argv) {  
    Command * base_command = new Command(); 
    Command * run_command = new RunCommand(); 
    cout << "Breakpoint"; 
    delete base_command; 
    delete run_command; 
    return 0; 
} 

Notez que j'ai inclus <typeinfo>. Je vais arrêter de regarder les variables à l'impression de la ligne "Breakpoint". Voici comment le point de montre ressemble: enter image description here

L'expression de la montre sont:

typeid(*base_command).__name 
typeid(*run_command).__name 

Comment ça marche:

J'utilise le typeid operator. Je lui passe l'objet que je veux voir le type de. Notez que dans notre cas, nous devons déréférencer le pointeur pour accéder à l'objet. L'opérateur renvoie une sorte d'objetavec le membre __name. Ce champ semble contenir le type d'exécution de l'objet qui est passé à typeid.

Je ne sais pas à quel point c'est portable. J'ai fait ce qui précède en utilisant NetBeans 8.0.2 et gcc 4.8.2.