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 :

Arrêt de l'application sur exception


Sujet :

Lazarus Pascal

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Arrêt de l'application sur exception
    Bonjour à toutes et à tous,

    Aussi bizarre que cela puisse paraître, dans l'application suivante, j'utilise une exception pour lancer le programme :

    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
    program Sissy_WL;
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}{$IFDEF UseCThreads}
      cthreads,
      {$ENDIF}{$ENDIF}
      Interfaces, // this includes the LCL widgetset
      Forms;
     
    {$R *.res}
     
    begin
       Application.Initialize;
      try
        xB:= yB div xB;          {Si xB = 0 --> exception --> bon fonctionnement}
      except
        Application.CreateForm(TBase, Base);
        Application.Run;
      end;
    end.
    Si je lance le programme à partie de son fichier .exe, cela fonctionne très bien.

    Si je lance l'application à partir de l'EDI (Lazarus 1.2.4, mais pareil avec les versions précédentes), l'application ne se lance pas et j'ai le message :

    Le projet SISSY_WL a levé une exception de class 'External SIGFPE'
    In file 'Sissy_WL.lpr at line 17
    xB:= yB div xB; {Si xB = 0 --> exception --> bon fonctionnement}
    Ce qui est ci-dessus est un exemple d'arrêt, je l'obtiens dans d'autres cas (alors que le lancement par l'exe fonctionne).

    Y a-t-il un moyen d'éviter cela ?

    Merci de vote aide.

    Pierre

  2. #2
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour.

    Si cela peut te rassurer...
    En tentant d'exécuter un programme à partir de l'EDI (Lazarus 1.2.4 sous Win7) , j'ai souvent un message d'erreur qui bloque tout.
    Le plus souvent, c'est un message "external SIGSEGV".
    Alors qu'en exécutant le .exe, tout va bien.

    Cordialement
    Thierry

  3. #3
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

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

    D'abord, dans le code fourni, xB n'est pas initialisé et ne vaut pas forcément 0.
    Il est donc évident que le comportement n'est pas défini, et il peut différer selon qu'on est dans l'EDI, ou dans un .exe, ou bien en fonction d'une infinité d'autres facteurs.
    Je mets donc un xB := 0 avant le try.

    Ensuite, quand on exécute à l'intérieur de l'EDI on a, par défaut, des messages en cas d'exception qui ne s'affichent pas depuis un .exe.
    Il est toutefois possible de les désactiver dans les options de débogage.
    Mais ces messages ne sont pas bloquants, et avec le code ci-dessus en initialisant xB à 0, je peux continuer sans problème jusqu'à l'affichage de la Form.
    Et, attention, ce n'est pas parce qu'il n'y a pas de message que "tout va bien".

    Il n'y a donc aucune anomalie, et je trouve même que Lazarus est assez sympa d'accepter un code aussi absurde...

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par tintinux Voir le message
    ... D'abord, dans le code fourni, xB n'est pas initialisé et ne vaut pas forcément 0....
    Je n'ai donné qu'une partie du code pour montrer le fonctionnement sur exception. Bien évidemment, la variable xB est initialisée. Elle me sert de test pour autoriser ou nom l'utilisation du logiciel.

    Citation Envoyé par tintinux Voir le message
    ...Ensuite, quand on exécute à l'intérieur de l'EDI on a, par défaut, des messages en cas d'exception qui ne s'affichent pas depuis un .exe.
    Il est toutefois possible de les désactiver dans les options de débogage....
    Je vais essayer ça. Ce doit être "OnDivideByZero". Faut que je trouve la syntaxe exacte.

    Citation Envoyé par tintinux Voir le message
    ...Mais ces messages ne sont pas bloquants, et avec le code ci-dessus en initialisant xB à 0, je peux continuer sans problème jusqu'à l'affichage de la Form....
    Dans le cas présent, l'arrêt est rédhibitoire, il n'y a pas de fenêtre proposant "pause" ou "continuer".

    Citation Envoyé par tintinux Voir le message
    ...Il n'y a donc aucune anomalie, et je trouve même que Lazarus est assez sympa d'accepter un code aussi absurde...
    Je n'ai jamis dit qu'il y avait une anomalie, je cherche simplement à savoir si il y a une méthode pour contourner ce mode de fonctionnement.
    Ce code n'est absolument pas absurde, Je joue avec les possibilités offertes.
    Le logiciel dont je parle a fonctionné et été vendu à plusieurs centaines d'exemplaires sans jamais avoir eu de problème à ce niveau.

    Cordialement.

    Pierre

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut,
    Citation Envoyé par ChPr Voir le message
    Envoyé par tintinux
    ...Ensuite, quand on exécute à l'intérieur de l'EDI on a, par défaut, des messages en cas d'exception qui ne s'affichent pas depuis un .exe.
    Il est toutefois possible de les désactiver dans les options de débogage....
    Je vais essayer ça. Ce doit être "OnDivideByZero". Faut que je trouve la syntaxe exacte.
    Je pense plutôt au signal "Floating Point Exception" (SIGFPE) et hélas, ça n'a pas l'air implémenté... Extrait de l'aide :
    OS Exceptions
    Signals
    (not implemented)
    Defines if signals should be handled by the debugger or by the user program. For instance, an div by zero is first signalled by the OS. Then the FPC RTL translates this to an EDivByZero. When the signal is handled by the debugger, the program is stopped before the RTL translates this message. Currently the debugger always stops on a signal.
    source : http://wiki.lazarus.freepascal.org/I...#OS_Exceptions

    J'ai essayé, dans Outils / Options / Débogueur / Exceptions de cliquer sur [ + Ajouter ], il ne se passe strictement rien !

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... J'ai essayé, dans Outils / Options / Débogueur / Exceptions de cliquer sur [ + Ajouter ], il ne se passe strictement rien !
    Dans cette fenêtre, j'ai ajouté EDiByZero, cela aété enregistré, mais au final, cela n'a rien changé, l'exception est toujours déclenchée.

    Cordialement.

    Pierre

  7. #7
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut
    tu peux essayer ca peut etre..: http://lazarus-ccr.sourceforge.net/d...exception.html

    Mais sinon je suis bien d'accord avec ce qui a été dit et le fait que ton logiciel soit vendu n'y changera rien : ton code est dégueulasse.
    Windows aussi est très vendu

  8. #8
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut
    Déjà coder par l'exception ,certains en sont fan, moi je trouve que c'est un fardeau pour le développeur, ca devient très vite indébuggable, l'excpetion doit servir pour gérer les exceptions, pas pour des tests.
    Et ton arguement d'utiliser ce que te permet le language ne tient absolument pas, moi ca m'énerve fortement de lire ce genre de commentaire, parce que avec du js ou du php tu peux coder n'importe comment, ne rien initialiser et j'en passe... et c'est pour ca qu'il faut le faire? puisque php nous en laisse la possibilité on doit forcément coder avec les pieds???

  9. #9
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Le mode de fonctionnement de ce programme est bien bizarre. Ne pourrait-on pas le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if xB = 0 then
      Application.Terminate;
    Application.CreateForm(TBase, Base);
    Application.Run;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if xB = 0 then
      halt
    else
    begin
        Application.CreateForm(TBase, Base);
        Application.Run;
    end;
    ? C'est un plus simple, non?

    Il serait bon que tu nous indiques comment est affectée xB. Est-ce qu'en exécutant ton programme, tu lui passes des paramètres en ligne de commande ?

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. [Lazarus] Désactiver l'arrêt sur exception dans l'EDI
    Par pedestre dans le forum Lazarus
    Réponses: 1
    Dernier message: 21/11/2009, 12h36
  2. Mon application s'arrête brutalement sans lever d'Exception
    Par verbose dans le forum Général Java
    Réponses: 13
    Dernier message: 27/06/2009, 14h04
  3. base de donnees sur serveur application sur client
    Par rabi dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/05/2004, 21h04
  4. quel langage pour créer des "applications" sur 1 s
    Par jaribu dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 30/07/2003, 14h06

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