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

Lazarus Pascal Discussion :

Valeurs inattendues et totalement inexplicables de variables locales au débogage


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut Valeurs inattendues et totalement inexplicables de variables locales au débogage
    Bonsoir tout le monde!

    Je ne sais si je vais quitter ce post couvert de gloire pour avoir découvert LA bogue du siècle ou dégoulinant de tomates trop mûres pour ne pas avoir compris à quel point j'étais stupide..

    J'ai depuis hier des ennuis avec mon code.
    Et c'est simple en plus.

    Jetez un œil sur ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Procedure test;
    Var A, B, C: integer;  // (ou n'importe quel ordinal)
    Begin
    A:=1;
    B:=2;
    C:=3;
    End;
    Bon pas trop compliquié hein?

    Si je débogue ligne par ligne, j'observe que TOUTES CES VARIABLES PRENNENT LA MEME VALEUR!
    Exactement comme si les pointeurs des variables locales pointaient vers la même zone mémoire..

    Je travaille sur la dernière version de Lazarus (la 2.0.2) sur Windows 8.1

    Alors je fais quoi? Je ne vais tout de même pas tout convertir en chaîne (car les chaînes ne posent pas ce problème..)

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Certainement une optimisation du compilateur puisque ces trois variables ne sont pas utilisées (A = 1 et ? Rien ! --> Ignorée).

  3. #3
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Certainement une optimisation du compilateur puisque ces trois variables ne sont pas utilisées (A = 1 et ? Rien ! --> Ignorée).
    Je me suis mal expliqué sans doute: ici j'ai réécrit un bout de code de démo, mais le vrai code utilise d'autres variables et elles sont utilisées.
    Des variables locales définies, seules deux semblent "couplées".

    Maintenant, j'ai pensé aussi au compilateur, mais si c'est le cas, quelle commande lui donner pour qu'il ne m'embête plus?

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Citation Envoyé par hlmhv Voir le message
    Je me suis mal expliqué sans doute: ici j'ai réécrit un bout de code de démo, mais le vrai code utilise d'autres variables et elles sont utilisées.
    Des variables locales définies, seules deux semblent "couplées".

    Maintenant, j'ai pensé aussi au compilateur, mais si c'est le cas, quelle commande lui donner pour qu'il ne m'embête plus?
    Salut pourrais tu nous donner plus d'informations. Quel est le message affiché par le débogueur ? Quel est ton code complet et sur quelle ligne se situe le problème.
    As tu utilisé un suivi (CTRL+F5) ou un point d'arrêt/suivi (MAJ+F5) ? Quels sont les valeurs affichées ?

    Et comme
    Citation Envoyé par Andnotor Voir le message
    Certainement une optimisation du compilateur puisque ces trois variables ne sont pas utilisées (A = 1 et ? Rien ! --> Ignorée).
    l'as souligné c'est bien ça dans le simple cas que tu as présenté

    Sinon pour empêcher l'affichage de certain "avertissements/conseils" fais un clique droit sur le message et tu auras as ta disposition plusieurs options

    exemple :

    Nom : 02a.jpg
Affichages : 141
Taille : 13,2 Ko

    Bonne fin de soirée

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour



    Salut pourrais tu nous donner plus d'informations. Quel est le message affiché par le débogueur ? Quel est ton code complet et sur quelle ligne se situe le problème.
    As tu utilisé un suivi (CTRL+F5) ou un point d'arrêt/suivi (MAJ+F5) ? Quels sont les valeurs affichées ?

    Et comme l'as souligné c'est bien ça dans le simple cas que tu as présenté


    A+
    Voici le code original complet:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    PROCEDURE Tform1.Btnfusionclick(Sender: Tobject);
    Var
      I, J, X, Y, N, R: Integer;
      Sum: Longint;
    BEGIN
      With PB Do Begin
        Max:=ImFrom.Picture.Bitmap.Height;
        Visible:=true;
      END;
      ImTo.Visible:=false;
      C:=0;
      Sum:=0;
      N:=SpinEdFus.Value;
      R:=N div 2;
      For J:=R to ImFrom.Picture.Bitmap.Height-R-1 Do Begin
        pb.Position:=j;
        For I:=R to ImFrom.Picture.Bitmap.Width-R-1 Do Begin
          //****************************************
          Sum:=0;
          For Y:=J-R to J+R Do
            For X:=I-R to I+R Do begin
              C:=ImFrom.Picture.Bitmap.Canvas.Pixels[X, Y];
              Sum:=Sum+C;
            end;
            //****************************************
          Sum:=Sum div (N*N);
          ImTo.Picture.Bitmap.Canvas.Pixels[I, J]:=Sum;
          B.Canvas.Pixels[I, J]:=Sum;
        END;
      END;
      PB.Visible:=false;
      ImTo.Refresh;
      ImTo.Visible:=true;
      Memo.Lines.Add('Fusion '+IntToStr(N)+'*'+IntToStr(N));
      BtnSaveBMPTo.Click;
    End;

    Rien de bien méchant donc.
    Les variables en cause sont C & SUM. Valeurs lues via point d'arrêt.
    Attention! Le débogueur ne me donne pas d'erreur mais ce sont les valeurs des deux variabes qui sont "couplées". C & Sum donnent les mêmes valeurs et varient en même temps, exactement comme si ces deux variables locales occupaient sur la même zone mémoire.


    Je viens de recompiler sur un second PC disposant de Lazarus 1.8.4 sous Windows 10 et l'erreur n'apparaît plus.

Discussions similaires

  1. Utiliser la valeur d'un spinner lors de la déclaration d'une variable locale
    Par Jiggazzzzz dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 05/12/2011, 09h31
  2. Réponses: 4
    Dernier message: 15/11/2011, 06h28
  3. Réponses: 2
    Dernier message: 23/01/2009, 14h09
  4. Echec de stockage d'une valeur dans une variable locale pointée par EBP
    Par homeostasie dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 16/12/2008, 13h52
  5. Réponses: 2
    Dernier message: 08/04/2007, 22h24

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