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 :

Erreur séquentielle lors d'un débogage [Lazarus]


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 Erreur séquentielle lors d'un débogage
    Bonsoir,
    Cela fait 40 ans que je code en Pascal (Turbo puis Delphi et maintenant Lazarus) et je n'ai jamais connu cette erreur.
    Je compile le code suivant sans erreur, mais lorsque je le débogue via F7, arrivé au constructeur "Init", le débogueur pas-à-pas pointe sur la ligne BEGIN, puis saute immédiatement sur END.
    Donc aucune initialisation, et forcément tout appel à un TFile par après cela plante avec un message SIGSEGV, ce qui est logique.
    Alors pourquoi diable INIT ne s'exécute-t'il pas?

    Please help me before I cry!


    Voici le code :

    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
    37
    Type
      TFile = Class(TPersistent)
      Constructor Init(IPath: String; Mode: Char);
      Destructor  Done;
    Private
      F: TextFile;
      Path: string;
      end;
     
     
    implementation
     
     
    Constructor TFile.Init(IPath: String; Mode: Char);
    Var
      Code: Integer;
    Begin
      Path:=IPath;
      If Mode='w' Then
        Code:=0
      else
        If Mode='a' Then
          Code:=1
       else
         Code:=2;
      If FileExists(Path) Then begin
        AssignFile(F, Path);
        Case Code of
          0:  Rewrite(F);
          1:  Append(F);
          2:  Reset(F);
       end;
      end else Begin
        AssignFile(F, Path);
        Rewrite(F);
      end;
    end;

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    A mon avis, il ne manque que la création de l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Constructor TFile.Init(IPath: String; Mode: Char);
    Var
      Code: Integer;
    Begin
      inherited Create; // sinon, rien ne crée l'objet
      Path:=IPath;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    Salut

    le constructeur ce n'est pas create pour un Tpersistant ?

    je pense donc que ton derivé doit faire de meme
    sans oublier le override; a la fin du constructor

    cordialement ,
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    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 Erreur séquentielle
    Merci à tous deux pour votre rapide intervention!

    Je vais voir demain si cela ne cloche plus.

  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
    Résolu en créant un bon vieil objet plutôt qu'une classe.
    J'avoue ne pas comprendre l'intérêt du second par rapport au premier.


  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    Salut

    C'est une question de compatibilité et de gestion mémoire dans mon souvenir.

    L'objet est mis sur la pile et donc allocation mémoire obligatoire, ce qui limite en terme de capacité la mémoire globale de l'appli.
    La class elle est installée sur le tas... On allow qu'au moment de son utilisation.

    À terme l'object tend à disparaître au détriment du record auquel on associe maintenant des méthodes.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    A mon avis, il ne manque que la création de l'objet :
    L'objet existe déjà avant l'appel de cette méthode. Le constructeur sert à la création des objets imbriqués et à l'initialisation des variables.
    TPersistent ne définissant pas de constructeur et TObject (ancêtre) qui en déclare un mais n'y fait rien, inherited n'est pas requis dans ce cas précis.

    Citation Envoyé par anapurna Voir le message
    le constructeur ce n'est pas create pour un Tpersistant ?
    On peut donner le nom qu'on veut au constructeur comme au destructeur.
    Là où ça pourrait être problématique est dans le cas de composants puisque le parent pourrait appeler Free à sa destruction qui invoquera Destroy et non Done. Mais si on maitrise le cycle, pas de soucis !

    Citation Envoyé par anapurna Voir le message
    sans oublier le override; a la fin du constructor
    Comme dit précédemment, TPersistent ne définit pas de constructeur et celui de TObject n'est pas virtuelle, override ne compilera pas


    Je pense ici que le problème est simplement qu'il y a une deuxième déclaration d'un TFile dans une autre unité (voir les unités dans uses) et que celle utilisée n'est pas celle éditée. Ou alors un problème de DCU (DCU sous Free Pascal ?)

    Sinon TPersistent apporte la gestion des flux (lecture/écriture). Par exemple les propriétés de type objet d'un composant dérivent de TPersistent ce qui permet l'édition de ses propriétés à travers l'inspecteur d'objet et la sauvegarde dans le fichier fiche.

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    L'objet existe déjà avant l'appel de cette méthode. Le constructeur sert à la création des objets imbriqués et à l'initialisation des variables.
    TPersistent ne définissant pas de constructeur et TObject (ancêtre) qui en déclare un mais n'y fait rien, inherited n'est pas requis dans ce cas précis.
    Effectivement, merci pour ta mise au point instructive
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #9
    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
    Merci pour votre aide constructive!

    (D'autant plus que pour un problème similaire - je gère un logiciel Lazarus qui doit communiquer avec un logiciel Python) je me suis fait incendier sur ce dernier forum.. )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Message d'erreur Windows lors de l'exécution de l'appli D6-
    Par kolac dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/12/2004, 17h55
  2. Réponses: 15
    Dernier message: 16/09/2004, 09h37
  3. [ACCESS] [JET] [ADO] Erreur 3000 lors d'un update
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/08/2004, 21h16
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Erreur windows lors du malloc
    Par Elessar dans le forum C
    Réponses: 5
    Dernier message: 16/12/2003, 08h53

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