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

Windows Forms Discussion :

connaitre la fonction en cours


Sujet :

Windows Forms

  1. #1
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut connaitre la fonction en cours
    Bonjour a tous

    Je cherches une façon de trouver le nom de la fonction de façon dynamique , pendant l'execution du programme.
    Ceci me permet de faire un suivit en cas d'erreur, de savoir ou le problème se situe et d'en avoir un historique dans une DB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Try
     
                      mon code
     
     
               Catch Ex as Exeption
     
                      enregistrement de MaClass/Module et maFonctionEnCours      
     
                End Try
    La Connaissance est comme la joie elle s'accroît en la partageant!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut
    Tu peux l'avoir avec les classes StackTrace et StackFrame. Mais si tu veux faire ça pour toutes tes fonctions, ça risque d'être bien lent.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    dasn un catch ce qui est pratique à enregistrer c'est
    - le type d'erreur (ex.gettype.name)
    - le message (ex.message)
    - voir s'il y a une exception sous jacente (ex.innerexception)
    - la pile des appels (ex.Stacktrace)

    pour le nom de la classe en cours c'est me.gettype.fullname
    le nom de méthodes en cours c'est System.Reflection.MethodInfo.GetCurrentMethod.Name

    sinon pour ne pas avoir 50 lignes de code dans les catch, fait une fonction quelque part que tu appelles depuis le catch de manière plus ou moins générique

    après y peut y avoir encore pas mal de choses interressantes, mais là déjà ca permet de débugger facilement

    sachant que si les fichiers .pdb sont à coté de l'exe, le numéro de ligne sera écrit dans le ex.stacktrace



    (et je vois pas ce qu'il y a de lent à faire ca, une levée d'exception n'étant déjà pas très rapide en plus)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Grand merci pour la réponse qui m'éclaire déjà en grosse partie, je vais faire quelques petits test pour l'ensemble de la gestion catch avec ce que tu m'as donné.

    Encore merci

    La Connaissance est comme la joie elle s'accroît en la partageant!

  5. #5
    Membre émérite

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Points : 2 368
    Points
    2 368
    Par défaut
    C'est très intéressant.

    Et comment fait t'on quand on crée une procédure msgErreur() pour connaître le Me.GetType.FullName et System.Reflection.MethodInfo.GetCurrentMethod.Name de l'appellant de la procédure ?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    on ne peut pas vraiment

    mais dans ex.Stacktrace on voit bien la méthode d'où vient l'erreur donc la méthode en cours en général on s'en fout
    (j'ai précisé comment la trouver car thierry la demandait, mais si on veut limiter le nombre de lignes de code dans les catch c'est pas très pratique)

    si on se fait une classe d'enregistrement d'erreur en général on l'appel dans le catch en lui donnant ex et éventuellement me
    cette méthode (ex as exception, instance as object) enregistre tout ce qui est intérressant sur ex et quelques truc interréssant sur l'instance (instance.gettype permet de faire de la reflection et de trouver le type, et les valeurs des champs et propriétés)

    la valeur des paramètres d'entrées de la méthode (s'il y en a) pourrait etre encore plus pratique, mais la reflection permet seulement de connaitre leurs types
    pour les valeurs ca devient du code inbuvable pour la lire dans la pile de la CLR (mais ca reste faisable techniquement)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre émérite

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Points : 2 368
    Points
    2 368
    Par défaut
    Ok ok merci bien Pol63

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    (et je vois pas ce qu'il y a de lent à faire ca, une levée d'exception n'étant déjà pas très rapide en plus)
    Je disais que ça serait lent s'il utilisait ça dans toutes les fonctions. C'est sûr que s'il ne le fait que dans le catch ça pose tout de suite moins de soucis

  9. #9
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Voila a présent je peux savoir ou j'ai le problème ce qui dans certains cas s'avère très interessant.
    Surtout que lorsque le programme est mis dans les mains des utilisateurs, il y a un ta de manipulations aux quelles on ne pense pas toujours et bardaff plantage. Le Catch permet d'en récupérer mais il faut les corigées.

    Le but étant de mettre la procédure aux endroits plus critiques et non partout dans le code

    Merci encore

    La Connaissance est comme la joie elle s'accroît en la partageant!

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/01/2010, 14h48
  2. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  3. Réponses: 2
    Dernier message: 24/08/2006, 10h46
  4. je voudrai connaitre cette fonction?mp ado
    Par khier dans le forum Bases de données
    Réponses: 11
    Dernier message: 19/08/2006, 20h23
  5. Connaitre la fonction appelante
    Par linar009 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/07/2006, 08h46

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