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

Langage Delphi Discussion :

Analyser les exceptions survenues lors de l'exécution


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 299
    Points : 373
    Points
    373
    Par défaut Analyser les exceptions survenues lors de l'exécution
    Bonjour,

    J'ai parfois dans un logiciel que je développpe des exceptions violation d'accès mémoire. Mon programme les récupère bien, les met dans le journal, gère ça proprement. Mon soucis est ces exceptions se produisent en production, dans un contexte plus complexe que les tests que j'arrive à faire, et que je ne sais pas comment remonter à la portion de code qui les provoque.
    Une première solution est de mettre un max d'infos dans le journal pour essayer de faire un test plus complet, mais ça ne suffit pas à reproduire certains plantages.
    La seconde, trouvée qq part, serait de réécrire complétement le gestionnaire d'erreur pour avoir par exemple la pile d'exécution, mais c'est assez complexe.
    Donc si vous avez une troisième solution à me proposer?

    Cordialement
    Cédric

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 299
    Points : 373
    Points
    373
    Par défaut
    Mon code est sous tests unitaires intensifs, ceci dit quelques cas ont pu m'échapper. Le logiciel en question tourne toute la journée actuellement, et a quelques plantages par semaine, plantages qui ne provoquent pas de perte de données d'ailleurs, mais une assez grosse perte de temps.
    J'utilise des composants que je ne controle pas et qui ne sont pas testés unitairement, même s'ils sont testés via du code qui les utilisent.

  3. #3
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Effectivement je crois que l'idéal serait que tu logues aussi la pile d'appel.
    Cela la JCL te permet de le faire assez facilement. Si je me souviens bien c'est l'unité JclDebug (de mémoire, pas sur, faut chercher un peu). Regarde aussi du coté de Fichier > Nouveau... > onglet Dialogs > il y a là aussi une ExceptionDialog toute faite de la JCL que tu pourrais éventuellement utiliser.

    Bien entendu il faudra alors coinstruire tes applications avec les infos de déboggage, sinon pas de pile d'appels. Mais bon le rapport service que ca rend / place que ca prend tend presque vers l'infini

    Bon app'

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 299
    Points : 373
    Points
    373
    Par défaut
    Ok je vais jeter un coup d'oeil sur la JCL, merci!

  5. #5
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    Salut,
    je viens de tester la soluce de DMO, en effet ca fonctione mais jai pas compris ce que veut dire :
    Call Stack:
    [0046D748]
    [00403BDF]
    [0046D803]
    [0046D8B3]
    [0043A5F0]
    [0043D3A3]
    [0043A228]
    [0043D4DB]
    [0043D3A3]
    [0043D020]
    [0041E5DC]
    [0043D487]
    [0043D3A3]
    [0043D020]
    [0041E5DC]
    [00458BA3]
    [0046DD93]

  6. #6
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    jai oublié de montioner que le compo sappele:
    TJvDebugHandler

  7. #7
    Membre averti
    Avatar de delphichem
    Inscrit en
    Octobre 2002
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 280
    Points : 338
    Points
    338
    Par défaut
    Salut
    Les exceptions! quelle galère. Tout fonctionne sur notre machine, mais lors du déploiment...

    J'ai lu cet article, il pourra t'orienter vers une solution qui te convient J'espère en tout cas.
    http://delphi.about.com/od/toppicks/tp/aatpmemleak.htm

  8. #8
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Citation Envoyé par Soulama
    jai pas compris ce que veut dire: [0046D748] ...
    Concernant l'utilisation de la JCL, une fois la StackList récupérée, il faut aller chercher les infos pour les loguer.

    Pour cela, avec chaque élément de la StackList, il faut récupérer un TJclLocationInfo représentant la procédure ou la fonction. Et ensuite se servir de ces infos pour loguer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      StackList: TJclStackInfoList;
      vInfo: TJclLocationInfo;
    Ce code ne compilera pas car je log dans un XML et je ne vais pas coller tout les Data Binding, mais il montre comment je procède :

    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
      StackList := JclLastExceptStackList;
      if Assigned(StackList) then
        for vIndice := 0 to StackList.Count-1 do
          if GetLocationInfo(StackList[vIndice].CallerAdr, vInfo) then
            with vLog.PileAppels.Add do
              begin
                Addresse := '$' + IntToHex(Cardinal(StackList[vIndice].CallerAdr), 8);
                NomUnite := vInfo.UnitName;
                FichierSource := vInfo.SourceName;
                Classe := Copy(vInfo.ProcedureName, 1, AnsiPos('.', vInfo.ProcedureName)-1);
                NomMethode := Copy(vInfo.ProcedureName, AnsiPos('.', vInfo.ProcedureName)+1, Length(vInfo.ProcedureName));
                OffsetNomMethode := '$' + IntToHex(vInfo.OffsetFromProcName, 2);
                OffsetNumeroLigne := vInfo.OffsetFromLineNumber;
                NumeroLigne := vInfo.LineNumber;
              end;

  9. #9
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    le Code que tu a ecrit tu le met ou normalement
    je veux dire:
    si je fais un truc comme ca :
    Try
    except
    // alor tu le met ici ou pas
    end;

  10. #10
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Non ne t'inquiète pas tu n'as heureusement bien pas à faire ca. Nous sommes ici dans le contexte d'une exception inattendue, non interceptée, qui "remonte" donc jusqu'au niveau de l'utilisateur (elle est affichée ou/et loguée).

    Si on étudie l'unité générée lorsqu'on crée une TExceptionDialog de la JCL (Fichier > Nouveau > ...), il y a lors de l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnException := TExceptionDialog.ExceptionHandler;
    Donc toute exception non interceptée arrivera dans ExceptionHandler, qui va afficher la form TExceptionDialog, qui elle affichera des infos de débuggage parmis lesquelles sont censées se trouver celles dont nous parlons.

  11. #11
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    c bon, jai compris.
    Merci

Discussions similaires

  1. [MySQL-5.5] Trigger : erreur survenue lors de l'exécution
    Par salawu dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/01/2014, 15h24
  2. echec connexion HTTP: exception: IOException, lors de l'exécution de la requête
    Par judy-brainy dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 10/10/2011, 15h02
  3. Réponses: 2
    Dernier message: 21/10/2009, 10h30
  4. Exception lors de l'exécution d'une application RCP
    Par bricelaurel dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 21/10/2008, 17h06
  5. Réponses: 4
    Dernier message: 06/09/2005, 10h58

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