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

EDI Delphi Discussion :

[D7]Evaluateur qui plante


Sujet :

EDI Delphi

  1. #1
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut [D7]Evaluateur qui plante
    Salut à tous, j'ai un probleme avec l'evaluateur de Delphi, lorsque j'appele une procedure avec le retour d'une fonction en parametre.
    Je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interface
     
    procedure Dbg(const APoint: TPoint);
     
    const ptNul: TPoint = (X:0; Y:0);
     
    implementation
     
    procedure Dbg(const APoint: TPoint);
    begin
      OutputDebugString(PChar(format('%d, %d', [APoint.X, APoint.Y])));
    end;
    Avec ce code, lorsque sur un point d'arret, j'evalue Dbg avec une constante ou une varaible en parametre, ca fonctionne tres bien. Par contre, si j'utilise un appel a une autre fonction pour obtenir le parametre, ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dbg(ptNul) //bien évalué
    Dbg(Point(1,1)) //affichage d'une violation d'accès dans la partie "résultat" de l'evaluateur
    Autre chose bizare, lorsque j'enleve le const du parametre APoint, l'evaluateur ne m'affiche plus la violation d'acces, il ne m'affiche rien (alors que si ca se passe bien il affiche "(Aucun résultat)") , et ne fait pas non plus le traitement.

    Avez vous une idée de ce que je pourrai faire pour que cela fonctionne ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Que veux-tu dire avec "ne fait pas non plus le traitement" ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    je veux dire par là qu'il n'effectue pas le code de la fonction Dbg (pas de OutputDebugString quoi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure Dbg(const APoint: TPoint); //Aucune action. Résultat de l'evaluateur:'Violation d'acces ...'
    procedure Dbg(      APoint: TPoint); //Aucune action. Résultat de l'evaluateur:''

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Cela fonctionne parfaitement chez moi !
    avec const, je n'ai pas de violation d'accès !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    ah bah mince alors. Et tu es bien sous Delphi7 ?
    tu evalue a quel moment.
    Moi j'ai fait une form de test, un bouton avec un sleep(0) dans le onclick et un point d'arret dessus.

    Ca vient peut etre de ma methode pour que la fonction ne sois pas eliminée par le lieur. Dans la partie initialization, j'ai mis une "if isZero(5) then Dbg(ptNul);"

    C'est peut etre un peu debile comme suppositions, mais je ne vois pas comment ca se fait que ca marche chez toi et pas chez moi !!!

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    J'ai bien D7
    J'ai vite fait tester dans le projet que je maintiens, dans le click d'une action (que je développais au moment de ma réponse)
    L'évaluateur me mets "valeur indisponible" si j'essaye d'évaluer "Point(1,1)" en le surlignant, mais ça fonctionne par F7

    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
    23
    const ptNul: TPoint = (X:0; Y:0);
     
    procedure Dbg(const APoint: TPoint);
    begin
      OutputDebugString(PChar(format('%d, %d', [APoint.X, APoint.Y]))); //bien évalué
    end;
     
    procedure Dbg2(APoint: TPoint);
    begin
      OutputDebugString(PChar(format('%d, %d', [APoint.X, APoint.Y]))); //bien évalué
    end;
     
     
    procedure TfMain.Act***Execute(Sender: TObject);
    begin
    Dbg(ptNul); //bien évalué
    Dbg(Point(1,1)); // valeur indisponible par surlignement mais Ok par F7
     
    Dbg2(ptNul); //bien évalué
    Dbg2(Point(1,1)); // valeur indisponible par surlignement mais Ok par F7
     
      // T***.Execute();
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    je suppose que chez toi, F7 c'est "evaluer/modifier".
    mon probleme ne vient pas de l'evaluation de "Point(1,1)", mais bien de "Dbg(Point(1,1))".
    Images attachées Images attachées   

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Ah, mais évaluer une procédure n'a pas de sens puisqu'elle ne renvoie pas de résultat !
    quoi que j'évalue souvent ShowMessage pour afficher du texte trop long qui fait paniquer l'évaluateur ...

    si j'évalue TOUT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dbg(ptNul); //(aucune valeur) + Journal Event
    Dbg(Point(1,1)); //Violation d'accès pour 00D34268 accédant à 00000000
     
    Dbg2(ptNul);// (aucune valeur) + Journal Event
    Dbg2(Point(1,1)); //perdu dans la nature
    Mais, je ne vois pas à quoi ça sert ton histoire, tu cherches la petite bête, la preuve je n'avais pas compris ce que tu cherchais à évaluer car pour moi cela n'a aucun intéret, si tu l'as en code, tu fais F8 et ça évalue ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    c'est juste une retranscription plus simpliste du problème que j'ai.
    Ma fonction DBG sert a afficher un point sur un canvas évolué, et j'ai des fonctions de calcul (par exemple intersection entre 2 segments) qui me retournent un point.
    Ce que je veux faire, c'est afficher, a un moment quelconque de l'execution, le point retourné par cette fonction si j'ai besoin de le verifier.
    Certes, je pourrai stopper l'execution, mettre l'appel de dbg la ou j'en ai besoin, et relancer; mais c'est un peu lourd, surtout que ma fonction marche tres bien si le point que je lui passe est une variable ou une constante !

    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
     
    procedure QuiFonctionne;
    var
      x: TPoint;
    begin
      x := getIntersection(seg1, seg2);
     //ici je peux faire Dbg(X), ca marche sans probleme
    end;
     
    procedure QuiNeFonctionnePas;
    var
      x: TPoint;
    begin
      x := MoveBy(getIntersection(seg1, seg2), dX, dY);
      //ici je ne peux pas verifier le resultat de getIntersection car il n'est pas stocké, et l'evaluation sur une fonction ne marche pas
    end;

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    le plus simple ça serait pas d'ajouter un ODS dans getIntersection ?
    ça sera verbeux, mais tu auras ta trace sans te prendre la tête

    ou alors, tu décompose ton code pour stocker la valeur de getIntersection dans les codes critiques ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. PB d'update qui plante aléatoirement sans renvoyer d'erreur
    Par plc402 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2005, 09h10
  2. [Novice] Problème avec Eclipse 3.0.x qui plante
    Par esolarc dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2005, 13h22
  3. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50
  4. Pc qui plante
    Par tooms2028 dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 19/03/2005, 17h32
  5. [JTextArea] redessin qui plante
    Par phil_ma dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2005, 05h19

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