2009-03-06 8 views
2

J'ai une classe wrapper qui délègue son travail à un pimpl, et le pimpl est un pointeur vers une baseclass/interface sans données qui sont spécialisées de plusieurs manières différentes.Comment obtenir des informations de débogage pour un résumé (?) Pimpl en C++?

Comme ceci:

class Base 
{ 
    void doStuff=0; 
}; 

class Derived 
{ 
    int x,y; 
    void doStuff() 
    { 
     x = (x+y*2)*x; //whatever 
    } 
}; 

class Wrapper 
{ 
    Base* _pimpl; 
    void doStuff() 
    { 
     _pimpl->doStuff(); 
    } 
}; 

Maintenant, cela fonctionne très bien la plupart du temps, mais en allant dans le débogueur je ne peux pas voir x, y de la classe dérivée (parce que cela pourrait être quelque chose). Normalement, cela n'est pas pertinent, mais quand quelque chose ne va pas, voir l'état de Derived peut être important, mais pimpl obscurcit trop l'état (mais c'est l'idée originale d'un pimpl, donc je ne peux pas vraiment me plaindre).

Maintenant, j'ai une fonction tostring() qui imprime l'état à des fins de débogage, mais je me demandais s'il y avait une meilleure solution, pour déboguer ce genre de construction dans VisualStudio en particulier, mais une solution générale serait mieux.

Merci

Répondre

2

Il suffit de garder l'expansion sur l'arbre dans la fenêtre Autos ou l'une des fenêtres de la montre:

alt text http://www.freeimagehosting.net/uploads/626b4a37ee.png

+0

Mmm, ok votre droit, mais mon code réel est plus complexe que cela et cela ne fonctionne pas bien ... laissez-moi comprendre pourquoi cela ne fonctionne pas ... –

+0

Si vous le faites à partir d'une unité de compilation n'a pas la visibilité de la déclaration de la classe impl puis il n'est pas visible –

+0

on y va! C'est pourquoi ça ne fonctionne pas –

4

Avez-vous essayé la coulée de la variable dans * dérivé dans la fenêtre de la montre?

+0

ouais cela fonctionne, bon jusqu'à présent, mais nous espérons que quelqu'un a une solution magique :) –

+0

Quelle serait plus magique? – jmucchiello

Questions connexes