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 SIGFPE et fermeture de la fenêtre d'exécution


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut Erreur SIGFPE et fermeture de la fenêtre d'exécution
    Bonsoir,

    j'ai un petit problème dans un programme que je suis en train de faire: en fait, je déplace un personnage dans les cases d'un tableau (c'est un ptut jeu de stratégie).
    Tout marche, mais depuis un moment, pendant que je teste le programme en jouant, parfois, la fenêtre se ferme toute seule sans aucune raison apparente et sans message d'erreur (je dis sans raison, parce que je n'effectue pas d'actions particulières, mis à part des actions que j'ai pu faire auparavant).
    Aujourd'hui, j'ai testé le programme sur le pc d'un collègue, et pareiln sauf que là, il y a un message d'erreur SIGFPE. D'après mes recherches Google, il s'agit d'une erreur d'arithmétique, mais il n'y a pas de calculs particuliers pour le déplacement de mon personnage (sauf +-1 pour la ligne ou la colonne).
    Et comme le programme n'indique aucune ligne d'où pourrait provenir l'erreur, je n'ai aucune idée de comment le résoudre...
    Auriez-vous des informations sur cette erreur?

  2. #2
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Bonjour

    SIGFPE => SIGnal Floating Point Erreur

    C'est effectivement une erreur arithmétique. Tu dois utiliser des réels queque part dans ton code. Mais impossible de t'en dire plus sans voir le source...
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    D'accord, merci.
    Je comprends que ce soit difficile de voir sans la source, mais moi-même, je ne sais pas d'où elle vient... Je dois avoir au moins une quarantaine d'unités, donc bon... ^^

    Mais l'erreur intervient-elle lorsque le programme utilise la ligne qui est erronée? Parce que j'ai l'impression que c'est un peu aléatoire... :p

  4. #4
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par chrysbi Voir le message
    Mais l'erreur intervient-elle lorsque le programme utilise la ligne qui est erronée? Parce que j'ai l'impression que c'est un peu aléatoire... :p
    C'est plutôt lorsque effectue un calcul qui a comme résultat un dépassement de capacité. Tel une division par zéro...

    C'est pour cela que lors d'opérations qui peuvent avoir des résultats inattendus, il faut gérer les erreurs d'exception éventuelles. Dans le cas contraire, on se retrouve dans la m..de, euh mouise.

    Voila un exemple de gestion (globale) d'erreurs:
    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
    procedure CalculReel(Diviseur: Extended);
    begin
      try
        Application.MessageBox(PChar('Résultat: ' + FloatToStr(0/Diviseur)), 'Résultat de la division', 0);
      except
        Application.MessageBox('[Erreur interne 001] - Division par zéro', 'Erreur fatale', 16);
        Application.Terminate;
      end;
    end;
     
    procedure TfPrincipale.FormCreate(Sender: TObject);
    begin
      CalculReel(1E-100); // Correct
      CalculReel(1E-999); // Dépassement de capacité
    end;
    Après tu peux affiner la gestion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
    except
      on EInvalidOp  do ...
      on EMathError  do ...
      on EZeroDivide do ...
      on ...
    end;
    Note bien que dans l'EDI, tu aura toujours les dialogues d'erreur, mais pas lorsque tu exécute directement l'application. Seul les dialogues que tu aura (éventuellement) codés dans la partie Except seront affichés.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Est-ce que le problème, chez-toi ou chez ton collègue, se produit quand tu exécutes depuis l'EDI ?

    Y-as-tu activé tous les Contrôles (dans Projet,Options du projet, Code) et supprimé toute optimisation. Si oui, cela devrait de permettre de mettre l'EDI en pause et de voir dans la pile d'appel où se situe le souci.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Merci pour vos réponses.

    @tintinux: oui, le problème se produit quand j'exécute depuis l'EDI, mais aussi depuis le .exe (mais pas de message d'erreur chez moi). Pour les contrôles, je ne connaissais pas ces détails. J'essaierai!

    Mais en fait, je suis presque sûre que le programme ne plante pas pour une erreur arithmétique, car en fait, j'ai l'impression que ça a un rapport avec la "vitesse". Quand je maintiens une touche du clavier qui me permet de déplacer une image de curseur que j'ai créé, si je la maintiens un moment, ça plante, alors que si j'appuie plusieurs fois consécutivement et pas trop vite, en général, ça ne plante pas... Ca peut avoir un rapport? :o




    Une petite question, qui n'a rien à voir... En fait, j'aimerais renommer une unité (c'est un programme pour les cours, et bon, ça serait bien qu'on s'y retrouve). Comment faire? Parce que j'aimerais vraiment éviter de copier tout le contenu de l'unité dans une nouvelle (en fait, ça, c'est pas un problème puisque pas long à faire, mais refaire toute la fiche associée, c'est chiant). Je pense pas que je puisse modifier directement les fichiers .o, .pas, etc, non? Il me semble que Lazarus n'aime pas...

  7. #7
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par chrysbi Voir le message
    Mais en fait, je suis presque sûre que le programme ne plante pas pour une erreur arithmétique...
    Ben là, la question ne se pose pas car c'est bien le processeur arithmétique qui envoi le signal d'exception et il ne l'envoi pas sans raison. (à moins qu'il soit buggé... )
    Par contre, il se peut que ce soit un bug Lazarus ou d'une des ses bibliothèques.

    ... Quand je maintiens une touche du clavier qui me permet de déplacer une image de curseur que j'ai créé, si je la maintiens un moment, ça plante, alors que si j'appuie plusieurs fois consécutivement et pas trop vite, en général, ça ne plante pas...
    Est-tu certain de finir le déplacement précédent avant d'en entamer un nouveau ? C'est peut-être en relation avec ton erreur.
    Si c'est en rapport avec le clavier, ce que je ferais à ta place, c'est de faire simuler des déplacements aléatoires par ton application, histoire de voir ce que cela donne. Cela te permet aussi de jouer sur le délai entre deux déplacements.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    As-tu activé toutes les aides au débogage possibles dans "Projet > Options du projet..." ? En particulier : contrôles d'intervalle, contrôles de débordement, contrôles de pile, optimisation niveau 0 ou 1, générer les informations pour le debogueur, afficher les numéros de lignes dans les traces d'erreurs à l'execution.

    Souvent ça facilite la localisation des erreurs.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Alors. J'ai essayé toutes les options que tu as mis dans ton post batyann811, mais toujours pareil: quand ça bug, la fenêtre se ferme juste, et je retrouve l'éditeur de source (comme si j'avais cliqué sur "arrêter").

    Est-tu certain de finir le déplacement précédent avant d'en entamer un nouveau ? C'est peut-être en relation avec ton erreur.
    Ba en fait, c'est une touche du clavier qui permet d'effectuer le déplacement. Apparemment, ça but moins quand je vais lentement, mais ça n'empêche pas le programme de bugguer quand même...

    Et sinon, quelqu'un a une réponse pour ma question sur le renommage des unités? :o
    Une petite question, qui n'a rien à voir... En fait, j'aimerais renommer une unité (c'est un programme pour les cours, et bon, ça serait bien qu'on s'y retrouve). Comment faire? Parce que j'aimerais vraiment éviter de copier tout le contenu de l'unité dans une nouvelle (en fait, ça, c'est pas un problème puisque pas long à faire, mais refaire toute la fiche associée, c'est chiant). Je pense pas que je puisse modifier directement les fichiers .o, .pas, etc, non? Il me semble que Lazarus n'aime pas...

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    As tu essayé de lancer ton programme en dehors de l'IDE (de préférence dans une console pour ne pas rater d'eventuels messages d'erreur) ? Même problème ou pas ?

    Je ne crois pas qu'il existe d'outil pour renommer une unité dans lazarus. Il faut le faire à la main. Par exemple pour renomer l'unité Toto en Titi :
    • Fermer lazarus
    • Faire une sauvegarde du projet et la mettre à l'abris
    • Effacer toto.o et toto.ppu (du dossier lib)
    • Renommer toto.pas (ou toto.pp) en titi.pas (ou titi.pp)
    • Renommer toto.lfm en titi.lfm (si l'unité est une fiche)
    • Ouvrir Lazarus
    • Lancer une compilation et corriger les erreurs à la main (en fait remplacer les uses Toto pas uses Titi)

Discussions similaires

  1. Message d'erreur à la fermeture d'une fenêtre
    Par Pascal Lob dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/11/2011, 11h20
  2. Exécuter une action à la fermeture d'une fenêtre
    Par wwave dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 28/07/2005, 15h15
  3. Fermeture d'une fenêtre .dos
    Par VirginieGE dans le forum Windows
    Réponses: 2
    Dernier message: 03/06/2005, 13h56
  4. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  5. Arrêter un ttmt en cours, lors de la fermeture d'une fenêtre
    Par teska dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/12/2004, 14h08

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