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

C# Discussion :

Recuperer la methode source de l'exception


Sujet :

C#

  1. #1
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut Recuperer la methode source de l'exception
    Bonjour,

    J'ai implemete un event sur mon application (Application_ThreadException) qui se declenche a chaque exception. J'aimerai pouvoir recuperer le nom de la methode qui a provoque cette exception ou qlors la liste des methodes lancees pour arriver a cette exception.
    Je n'arrive pas a recuperer ces infos.

    Si quelqu'un a une idee...

    Merci d'avance.
    Contrec

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Va voir les classes StackTrace et StackFrame.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    J'ai deja utilise ces classes, mais je n'arrive pas a avoir le nom de la methode utilisee...

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StackTrace MyStackTrace = new StackTrace();
    StackFrame MyStackFrame = MyStackTrace.GetFrame(1);
    MethodBase MyMethodeBase = MyStackFrame.GetMethod();
    puis,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CLASS_NAME = MyMethodeBase.DeclaringType.FullName;
    METHOD_NAME = MyMethodeBase.Name;
    mais je n'ai pas resultat voulu, j'ai essaye tous les niveaux de frames...
    Contrec

  4. #4
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Est ce en rapport avec les frames ?
    Contrec

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Je viens de relire ton message et j'avais escamoté le fait que tu envoyais un event au niveau de l'exception. Il faut que tu récupéres le StackTrace de l'exception (celui fournit en propriété de l'exception) et que tu l'envoies à ton event.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    J'ai du mal a comprendre. Cet event se lance automatiquement lors d'une exception et voici ce que je recupere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
       Methods.ErrorHandlerInformation.InitializeErrorHandler(e.Exception, "Intern exception.");
    }
    La methode Methods.ErrorHandlerInformation.InitializeErrorHandler recupere le StackFrame et tout mais je n'ai pas la bonne methode retournee...

    Voici le code de cette methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void InitializeErrorHandler(Exception e, string ErrorTag)
    {
        LMA_DataSets.DS_ErrorHandler.T_ERROR_HANDLERRow MyErrorHandlerRow = this.GetNewErrorHandlerRow();
     
        StackTrace MyStackTrace = new StackTrace();
        StackFrame MyStackFrame = MyStackTrace.GetFrame(1);
        MethodBase MyMethodeBase = MyStackFrame.GetMethod();
        blabla...
    }
    Je lui passe bien l'exception...
    Contrec

  7. #7
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Si je recupere GetFrame(1) dans la methode qui genere l'exception, j'ai bien le nom de cette methode, par contre je n'y accede pas lorsque je suis dans l'event qui attrape les exceptions...
    Contrec

  8. #8
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    J'ai peut être mal compris mais...Dans ta méthode quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        StackTrace MyStackTrace = new StackTrace();
    il est clair que tu ne vas pas pouvoir récupérer directement la méthode qui a généré l'exception...Y a juste deux nouveaux appels entre la levée de l'exception et le moment ou tu récupères le stack

    Pourquoi tu ne fais pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void InitializeErrorHandler(Exception e, string ErrorTag)
    {
        StackFrame MyStackFrame = e.StackTrace.GetFrame(1);
        // ou directement
        MethodBase MyMethodeBase = e.StackTrace.GetFrame(1).GetMethod();
     
    }
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  9. #9
    Membre régulier Avatar de maitredede
    Homme Profil pro
    Pisseur de code
    Inscrit en
    Mai 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Pisseur de code

    Informations forums :
    Inscription : Mai 2006
    Messages : 59
    Points : 106
    Points
    106
    Par défaut
    Allé, je jette mon pavé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                Exception ex = e.Exception;
                StackTrace stack = new StackTrace(ex);
                MethodInfo method = stack.GetFrame(0).GetMethod();
            }
    Si je ne me trompe pas, ça doit être ça, à tester

  10. #10
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Oui c'est bien cela. Maintenant je dois enumerer toutes les Frames pour trouver celle qui me correspond.


    Merci beaucoup.
    Contrec

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Concept] Récupérer la méthode appelante ?
    Par Capt. Flame dans le forum Général Java
    Réponses: 5
    Dernier message: 10/04/2009, 18h35
  2. Recuperer le code source d'un programme
    Par jalilc dans le forum C
    Réponses: 21
    Dernier message: 23/05/2006, 16h40
  3. peut on recuperer le code source d'un package?
    Par qeja dans le forum Oracle
    Réponses: 9
    Dernier message: 14/03/2006, 17h05
  4. Réponses: 9
    Dernier message: 19/10/2005, 04h35
  5. [FLASH MX2004 PRO] Recuperer le code source d'une page
    Par adilou1981 dans le forum Flash
    Réponses: 9
    Dernier message: 26/07/2005, 18h11

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