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

C++Builder Discussion :

Debugger un fant�me


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut Debugger un fant�me
    Bonjour,

    J'ai un probl�me assez difficile � r�gler.

    J'ai un code o� il semble avoir une variable mal initialis�e ou trait�e. Les sympt�mes sont les suivants :

    -Lorsque je ferme l'application bien souvent il me fait l'erreur suivant :

    +Access Violation at adress :... in module BXXXX.DLL

    +Enfin, violation d'acc�s standard, seulement elle s'effectue � la fin de tout.

    -Lorsque, j'effectue une s�quence d'op�ration, la m�me erreur survient.

    -Je me mets des breakpoints et le probl�me ne semble pas venir de la ligne o� le probl�me survient.

    -J'interchange la position de deux variables dans la d�claration exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString temp = "";
    AnsiString deuxiemeTemp = "";
    Devient :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString deuxiemeTemp = "";
    AnsiString temp = "";
    Et le programme passe par dessus l'ancien breakpoint sans broncher.

    -Je mets des grandes parties de code en commentaire, l'erreur dispara�t. Je rejoute progressivement le code qui �tait en commentaire au code normal. Tout fonctionne jusqu'� un point qui ne me semble pas probl�matique. J'effectue quelque modification du type :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    ShowMessage(AnsiString(i+1));
     
    devient
     
    tempo = AnsiString(i+1);
    ShowMessage(tempo);
    Et le probl�me est r�gler, mais survient � un endroit o� avant il n'y avait pas d'erreur.

    Enfin, je semble traquer un fant�me... si quelqu'un connait un moyen de trouver la source...

    J'ai essayer avec CodeGuard, mais il me pointe toujours la ligne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    inFile.getline(temp, sizeof(temp));
    où
    char temp[256];
    il semblerait que cela soit un bug dans codeguard (selon ce que j'ai lu sur internet).

    Si quelqu'un a une id�e...

    merci...

    antoine

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Tu peux essayer de nettoyer ton projet en supprimant tous les fichiers inutiles (*.obj, *.~*, *.tds, etc...) , et en recompilant ton application en entier.

    V�rifie �galement que tu travail sur les bons fichiers. Il m'est d�ja arriver de copier un projet ailleurs, et de travailler sur certaines anciennes sources sans m'en rendre compte et de passer des heures a tenter de trouver un probl�me o� il n'y en avait pas.

  3. #3
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut Bonne nouvelle!
    Bonjour,

    Merci sat83 d'avoir pris le temps de r�pondre.

    Il semblerait que le probl�me soit dans ma fa�on de coder :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    strcpy(temp.c_str(), QueryPorteTotal->FieldByName("Modele")->AsString.c_str());
    Ce code ne g�n�re pas de probl�me lors du compilage. Il a �t� fonctionnel pendant un certain temps. Seulement, il ne fonctionne plus depuis un changement, dont je ne sait trop lequel.

    Le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    char tempC[256];
    AnsiString modele = "";
     
    strcpy(tempC, QueryPorteTotal->FieldByName("Modele")->AsString.c_str());
    modele = tempC;
    me d�barrasse de mes probl�mes. J'avais utilis� cette formule � plusieurs reprise ce qui rendait mon probl�me difficile � cerner. J'ai pratiquement tout mit ce que je pouvais en commentaire en gardant seulement le stricte minimum, et � partir de l� j'ai analys� tout le code restant, et c'est tout ce que je pouvait trouver d'�trange.

    C'est probablement un erreur de d�butant, j'aimerais mieux comprend la raison qui m'emp�che d'utiliser temp.c_str() dans la fonction strcpy.

    c_str() fonctionne pour la source, mais pas la destination?

    Enfin,

    Merci � tous,

    Antoine

    (J'esp�re ne pas trop vous avoir ennuy� avec mes b�tises)

  4. #4
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello,

    c_str() fonctionne pour la source, mais pas la destination?
    C'est presque �a.
    .c_str() te donne acc�s � la zone m�moire allou�e par l'AnsiString pour stocker la cha�ne. Le pointeur qu'il te donne est valide jusqu'� la prochaine modif de la cha�ne.
    Si tu �cris directement sur .c_str(), il faut �tre s�r que la zone m�moire d�j� allou�e est suffisament grande... Pour cela, .SetLength() te permet de "forcer" temporairement la taille de la cha�ne.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    AnsiString toto = "12";
    strcpy(toto.c_str(), "123"); // Marche pas
    AnsiString momo = "123";
    strcpy(momo.c_str(), "456"); // Sans intérêt, mais devrait marcher

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    c_str() renvoie un pointeur sur un tableau temporaire distinct.
    La meilleure fa�on de le comprendre est de consid�rer que le tableau est sur la pile (et non plus celui de l'AnsiString).

    A plus !

Discussions similaires

  1. [TP]debugger
    Par mmm dans le forum Turbo Pascal
    R�ponses: 4
    Dernier message: 07/12/2003, 22h07
  2. [BPW]Exécution du debugger Windows sur un OS 32 bits
    Par Alcat�z dans le forum Turbo Pascal
    R�ponses: 3
    Dernier message: 28/11/2003, 22h55
  3. [VB6] Comment Debugger une activeX ??
    Par Berns dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 19/05/2003, 17h34
  4. Debugger sous Linux
    Par Shadow Blade dans le forum Choisir un environnement de d�veloppement
    R�ponses: 6
    Dernier message: 29/11/2002, 18h54
  5. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    R�ponses: 4
    Dernier message: 28/06/2002, 11h34

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