IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[Visual C++ debugger] �valuer des expressions


Sujet :

Visual C++

  1. #1
    Membre �m�rite
    Homme Profil pro
    R&D imagerie 3D / prog embarqu�e
    Inscrit en
    Mars 2007
    Messages
    419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : R&D imagerie 3D / prog embarqu�e
    Secteur : Sant�

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par d�faut [Visual C++ debugger] �valuer des expressions
    Bonjour,

    Je d�veloppe une librairie qui historiquement �tait proc�durale.
    Depuis quelques temps d�j�, notre volont� est de faire des refactorings pour la rendre OO et surtout plus clean.

    Hors, avec l'OO, nous rencontrons des probl�mes pour �valuer les valeurs de retour des fonctions en debug.

    Jusque l�, lorsque nous voulions voir la valeur d'une variable imbriqu�e dans une structure de donn�es il suffisait de breaker dessus et de survoler la variable dans le code.
    Par exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    containerAInst.arrayPtrB[i].valueC // <= En survolant n'importe quelle variable de cette chaine, je pouvais voir sa valeur.
    Maintenant, mon code ressemble plus � �a :
    > containerA.h <
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "containerB.h"
     
    class containerA {
    private:
      containerB *arrayPtrB; // Un tableau dynamique
     
    public:
      containerA() {/*init arrayPtrB*/}
      ~containerA() {/*delete arrayPtrB*/}
     
      containerB& operator[](const unsigned int pIndex);
      containerB& operator[](const unsigned int pIndex) const;
      containerB& mGetContainerBAt(const unsigned int pIndex);
      containerB& mGetContainerBAt(const unsigned int pIndex) const;
    }
    > containerA.cpp <
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include "containerA.h"
     
    containerB& containerA::mGetContainerBAt(const unsigned int pIndex)
    {
      return arrayPtrB[pIndex];
    }
     
    containerB& containerA::operator[](const unsigned int pIndex)
    {
      return mGetContainerBAt(pIndex);
    }
     
    containerB& containerA::mGetContainerBAt(const unsigned int pIndex) const
    {
      return const_cast<containerA*>(this)->mGetContainerBAt(pIndex);
    }
     
    containerB& containerA::operator[](const unsigned int pIndex) const
    {
      return mGetContainerBAt(pIndex);
    }
    > containerB.hpp <
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    class containerB {
      int valueC; // Oui, c'est public. Il en reste encore quelques uns dans mon code, mais c'est surtout pour l'exemple.
      int valueB;
      bool isC;
    }
    Mon appel � travers des structures devient donc:
    Ou:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    containerAInst.mGetContainerBAt(i).valueC
    Le code ci-dessus est tr�s simplifi� : pas de polymorphisme, pas des fonctions virtuelles, juste une surcharge de la fonction mGetContainerBAt et l'op�rateur [].
    Pourtant, que je demande � VC d'�valuer l'un ou l'autre de des deux appel ci-dessus, j'ai toujours une erreur.

    Apr�s quelques lecture sur le web et quelques tests, je me suis aper�u que le probl�me venait de la surcharge des fonctions. Si je retire les deux fonctions const de mon code, �a marche.
    Mais bon, d'une part je suis oblig� de faire des const_cast un peu partout ou ne plus utiliser d'instance const. D'autre part, c'est quand m�me le but du polymorphisme de pouvoir surcharger des fonctions, les red�finir virtuellement etc...

    Pour l'instant, je n'ai que des workarrouds non satisfaisants:
    1 - Ajouter dans la watch window "containerAInst.arrayPtrB[i].valueC". <= Trop fastidieux � �crire � chaque fois qu'on a besoin d'une valeur... Et en plus ca oblige � connaitre l'impl�mentation de la fonction appel�e.
    2 - Utiliser les autos qui affichent les valeurs de retour des derniers appels. <= Satisfaisant lorsque le type de retour est primitif, mais lorsque c'est une instance d'un objet, on ne peut pas voir toutes les valeurs, ni naviguer dedans.

    J'imagine qu'il y a une solution � mon probl�me, pas mal de dev. travaillent sous VC++ au quotidien, mais je n'arrive pas � la trouver.
    Pouvez-vous m'aider SVP ?

    S'il n'y a pas de solution sous VC++, est-ce que le compilateur d'Intel ou un autre ferait mieux ?

    NOTE: Mon code est compos� d'une interface graphique manag�e et d'une lib statique native (pas de MFC). Je d�veloppais sous VS2010 compil� en vc9 (le probl�me �tait identique), mais je viens de migrer mon code en vc11 sous VS2012 depuis quelques jours.

    d'avance pour votre aide !!
    Ju

  2. #2
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Bonjour.

    Je rencontre parfois ce probl�me aussi.

    J'utilise trois cas de figure :

    - J'assigne la valeur que je souhaite d�bugger � une variable temporaire.
    - Je log la valeur dans un fichier.
    - J'utilise Debug:: Print.

    Lorsque les tests sont termin�s, je supprime les variables inutiles.

  3. #3
    Membre �m�rite
    Homme Profil pro
    R&D imagerie 3D / prog embarqu�e
    Inscrit en
    Mars 2007
    Messages
    419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : R&D imagerie 3D / prog embarqu�e
    Secteur : Sant�

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par d�faut
    Merci de ta r�ponse Moldavi,

    Pour l'instant, j'utilise aussi des variables temporaires. Mais c'est un plut�t lourd comme proc�dure. Ca oblige � arr�ter ma session de debug, modifier le code et refaire mon test.
    Si c'est la seule solution, je pense que je vais remettre en place le "Edit and continue" que j'avais abandonn� � cause des comportements ind�termin�s qu'il g�n�rait parfois.

    Sais-tu si c'est une limite de C++ qui a un mod�le m�moire beaucoup plus simple que java par exemple, ou si c'est une limite du compilateur de microsoft et/ou de Visual Studio ?
    Autrement dit, si je passe sur le compilateur d'Intel est-ce que �a marchera mieux ?

    Merci

  4. #4
    Membre �m�rite
    Homme Profil pro
    R&D imagerie 3D / prog embarqu�e
    Inscrit en
    Mars 2007
    Messages
    419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : R&D imagerie 3D / prog embarqu�e
    Secteur : Sant�

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par d�faut
    J�oubliais,

    L'�criture dans un fichier est difficile car la majorit� de mes threads sont "time critical".
    Le Debug:: print est bien pour les types simple, mais pour explorer un objet, c'est pas top.

    Encore merci

  5. #5
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Re.

    Pour les autres compilateurs, je ne peux pas te r�pondre, je ne connais que VS. Il me semble que je n'ai ce probl�me qu'avec VS2012 RC.

    Pour visionner les objets dans la console de d�bugage, je cr�e une fonction genre ToString() dans la classe de mon objet.

    Pour les tests "time critical", j'alloue de la m�moire, je log dans cette m�moire et � la fin du test, je log dans le fichier.

  6. #6
    Membre �m�rite
    Homme Profil pro
    R&D imagerie 3D / prog embarqu�e
    Inscrit en
    Mars 2007
    Messages
    419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : R&D imagerie 3D / prog embarqu�e
    Secteur : Sant�

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par d�faut
    Merci de ton aide !!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 16/04/2012, 14h45
  2. [C#] Comment �valuer une expression ?
    Par bart64 dans le forum C#
    R�ponses: 3
    Dernier message: 11/01/2006, 15h46
  3. Recherche recursive � l'aide des expressions reguli�re
    Par titoff dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 20/12/2005, 16h42
  4. [Visual Object] O� trouver des infos ?
    Par itanea dans le forum Autres langages
    R�ponses: 2
    Dernier message: 10/09/2004, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo