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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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