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

Delphi Discussion :

Récupérer le nom de l'évènement dans lequel on est


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Par défaut Récupérer le nom de l'évènement dans lequel on est
    Dans mon appli, je veux enregistrer toutes les erreurs qui surviennent dans un fichier avec une procédure qui prend en parametre un message que je choisi et le nom de la fonciton procédure d'ou j'appelle cette autre procédure qui écrit dans le fichier des erreurs.

    L'idéal serait que, plutot que de saisir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P_Ecrire_Fichier_Erreur('mon message d'erreur', 'la fonction ou je suis')
    je puisse récupéere le nom de la fonction par le code pour ne pas avoir à le saisir ce qui donnerait par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P_Ecrire_Fichier_Erreur('mon message d'erreur', FONCTION.NAME)
    J'expeère que vous m'avez compris et que vous pourrez m'aider. D'avance merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 66
    Par défaut
    Ca me fait penser de loin aux fonctions RTTI et à du débuggage mais sans plus.

    Par contre, tu peux probablement contourner le problème en créant un fichier Log que tu alimenterais dans les fonctions que tu considères comme critiques. Tu le détruirais en fin de programme si tout se passe bien. Inversement, après un plantage de ton appli par exemple, tu pourrais en executant de nouveau ton appli commencer par lire le fichier log éventuel pour voir où il y a eu une l'erreur (dernière ligne!) .

    A suivre......

  3. #3
    Membre éclairé Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Par défaut
    en fait, il s'agit d'un soft qui a été pensé il y a 14 ans (si si), qui a été developpé il y a 4 ans, et mis en service il y a 8 mois à mon arrivé dans l'entreprise alors que je ne connaissais pas Delphi... mon boulot est, en collaboration avec les uses, de faire en sorte que ce programme marche bien, car aujourd'hui c'est bugs sur bugs, or parfois les user me disent on a tel ou tel problème mais la majorité du temps ils laissent passé. Je veux donc mettre la gestion d'erreur sur les quelques 800 EXECPT que j'ai trouvé dans le code pour gérér moi meme les erreurs et les corriger (j'ai fait une petite fonction qui m'envoi un message via NET SEND dés quune erreur est déclenchée.

    Bref, je voulais pas trop taper les 800 nom de fonction/procédure des ou se trouve les except pour gagner un peu de temps

    De toute facon ce programme est une merde sans nom, dont l'analyse a été mal faite (y a de ces erreurs dans le MCD...) et pour lequel personne parmis les 4 précédents développeurs ne s'est donné la peine d'y mettre de la bonne volonté pour en faire un outil productif et agréable à utiliser

    Je me suis un peu défoulé là, c'est peut etre pas le bon endroit... désolé...

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 99
    Par défaut
    C'est bizarre, j'ai l'impression de bosser dans la même boite que toi... La situation est exactement la même (sauf que le logiciel à été écrit en 87 sous dos et passé sous delphi 1 -> 3 ->6). Je comprends ce moment de désespoir...

  5. #5
    Membre éclairé Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Par défaut
    Pour ceux que ca intéresse j'ai trouve ca

    http://www.undu.com/Articles/010729d.html

    en cherchant

    "methodname delphi" sur les groupes Google et ca a l'air de bien répondre à mes besoins

    A+++++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut NON Résolue
    Bonjour,

    C'est une question qui me bloque aussi actuellement mais malheureusement, je n'ai pas vu la solution (le lien ne marche pas, je ne trouve pas dans groups.google)...

    Quelqu'un peut m'aider ?

    Merci

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    je t'invite là:
    EasyLog

    c'est en plein pour toi...!
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut
    Merci pour rapidité de la réponse

    Mais en fait le easyLog donne le nom du fichier .pas et le numero de ligne. Je voulais avoir le nom de la procedure/fonction.

    J'ai trouvé qu'il y a des JclDebug, ... d'autres composants/biblio tiers mais je souhaitais le faire par un unit à inclure dans mon projet à la façon de easyLog en fait

    Encore merci.

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    C'est aussi mon rêve de convertire ce numéro de ligne par le nom de la fonction.
    Ce serait vraiment l'idéal pour easylog.pas.
    Mais à part de trainer un genre de petit fichier du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    de      à     Nom de Fonction
    0      100  procedure allo()
    102    150  function test()
    pour effectuer la convertion dynamiquement, je vois pas vraiment...

    Je vais suivre cette discution attentivement....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    à l'intérieur d'une procedure appartenant à un objet,
    et suite à la récupération du numéro de ligne avec EasyLog,

    on peut retrouvé le nom de la procédure en utilisant l'adresse de l'erreur:
    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
     
     
        //===================================
        //=== Recuperation des info debut ===
        {$IFOPT C- } {$DEFINE ASSERTIONS_WAS_OFF} {$C+} {$ENDIF}
        SAEP := AssertErrorProc; try AssertErrorProc := @OverLoadAssertErrorProc; Assert(FALSE); finally AssertErrorProc := @SAEP; end;
        {$IFDEF ASSERTIONS_WAS_OFF} {$C-} {$ENDIF}
        //=== Recuperation des info Fin   ===
        //===================================    
     
        //Avec l'adresse de l'erreur récupéré, retrouve le nom de la procedure...
        AMethodeName:='';
        while AMethodeName='' do
        begin
            AMethodeName:=MethodName(AErrorAddr);
            AErrorAddr:=Pointer(Integer(AErrorAddr)-1);
        end;
     
        //*** On log avec un nom de fonction valide! ***
        button1.Caption:=ExtractFileName(AFilename) +
                                         ' Line:'+IntToStr(ALineNumber)+
                                         ' '+ClassName+'.'+AMethodeName;
    C'est bon seulement à l'intérieur d'un objet....
    bon reste les autres fonctions...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Bon j'ai refais mes devoirs...

    Avec la JVCL, j'ai modifier EasyLog.pas pour inclure aussi les noms de fonction.

    J'ai remis a jour le code et la demo ici

    EasyLog

    Et voilà...ca fonctionne maintenant aussi très bien avec les
    procedures et functions qui ne sont pas dans des objets.

    Mais bon... tu as peut-être déjà terminer quelque chose d'équivalant?..
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. Récupérer le nom d'une table dans une fonction
    Par Milo59000 dans le forum SQL
    Réponses: 5
    Dernier message: 13/02/2008, 15h40
  2. Récupérer le nom d'un fichier dans une cellule
    Par NicolasJolet dans le forum Excel
    Réponses: 4
    Dernier message: 08/02/2008, 09h47
  3. Réponses: 5
    Dernier message: 21/07/2007, 19h23
  4. Récupérer le nom du fichier source dans son source
    Par jeromechezgdf dans le forum C#
    Réponses: 2
    Dernier message: 18/07/2007, 16h34
  5. [Free Pascal] Récupérer le nom d'une fonction dans une librairie
    Par franck.thibault dans le forum Free Pascal
    Réponses: 1
    Dernier message: 17/05/2007, 22h08

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