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 éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    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 chevronné

    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
    Points : 1 884
    Points
    1 884
    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 é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,

    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...
    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.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    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 éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 727
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 727
    Points : 15 125
    Points
    15 125
    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 !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    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 habitué Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Points : 191
    Points
    191
    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
    On ne peut créér ce qu'on ne peut imaginer...
    Tu sens la puissance du BIT?

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Points : 191
    Points
    191
    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???
    On ne peut créér ce qu'on ne peut imaginer...
    Tu sens la puissance du BIT?

  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 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    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