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 :

peut on récup plus d'infos des exceptions


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut peut on récup plus d'infos des exceptions
    Bonjour à tous.
    Je suis l'auteur d'un logiciel qui est désormais plutot imposant en nombre de lignes de code.

    Voila mon "problème", il arrive que des exceptions de bases soient levées, je pense à KeyNotFoundException et NullReferenceException principalement.

    Le problème c'est que ces exceptions ne me disent pas grand chose. J'aimerai connaitre le nom de la variable qui est null, on encore le nom de la collection et de la clé qui pose problème.

    Quels astuces pourriez vous me donner à ce sujet?

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si tu vas dans l'ecran Exceptions de VS (crtl + E, D) tu peux checker la ligne "Common Language Runtime Exceptions". Quand il y aura une exception, le débugger va se mettre sur la ligne exacte qui renvoie une exception. C'est souvent plus clair comme ça.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    je te conseille d'utiliser le callStack c'est tres pratique pour retrouver la ligne qui a causer l'exception ou aussi click sur Debug/Exceptions et coche CLR

  4. #4
    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
    Citation Envoyé par giova_fr Voir le message
    Quels astuces pourriez vous me donner à ce sujet?

    Merci d'avance pour votre aide.
    Déja en laissant les fichiers pdb en place, tu peux récupérer le numéro de ligne où a été levée l'exception dans le StackTrace.

    Par ailleurs, jamais on utilise uniquement le type de l'exception, c'est une information tout à fait insuffisante.

    Dans l'exception, tu utilises :

    - le type
    - le message
    - la stack trace (qui va contenir en plus le numéro de ligne si pdb présents).
    - l'inner exception => que tu analyses de la même manière que l'exception et de manière récursive car une "inner" peut avoir elle même une "inner", etc ....

    Après les autres infos dépendent du type d'exception.

    Je suis néanmoins un peu surpris que ayant un logiciel "...plutot imposant en nombre de lignes de code" (sic) tu n'ais pas de sérialisation d'exception complète dans tes logs.

    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci pour vos réponses, malheureusement elles ne m'aide pas, explication :

    Cela se passe chez mes clients, or :
    1) je ne leur donne pas les pbo
    2) les pbo ne serviraient à rien car le programme est obstrué donc impossible à lier avec un pbo.

    Pour chopper les infos de l'exception, je fais toujours une boucle du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String msg = String.Empty;
    Exception curErr = error;
    do
    {
    msg +=String.Format("\r\n-----\r\n{0}",curErr.ToString());
    curErr = curErr.InnerException;
     
    }while( curErr != null);
    Exception.ToString() contient à la fois le type, le message, la stack.

    En fait je me demandais si il n'y avais pas une solution, peut etre en utilisant de la reflexion, pour obtenir plus d'infos d'une exception, par exemple récupérer la valeur des arguments de chaque methode dans la stack, ca serait super !

  6. #6
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    En fait je me demandais si il n'y avais pas une solution, peut etre en utilisant de la reflexion, pour obtenir plus d'infos d'une exception, par exemple récupérer la valeur des arguments de chaque methode dans la stack, ca serait super !
    Pas possible avec la reflexion

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    Voila mon "problème", il arrive que des exceptions de bases soient levées, je pense à KeyNotFoundException et NullReferenceException principalement.

    Dans ce cas désolé de te le dire mais je pense que tu n'as pas proprement codé ton logiciel. Surtout pour l'exception KeyNotFoundException qui est typiquement liée à l'accès à un dictionnaire alors que la clef que tu lui fournis n'existe pas. Pour le NullReferenceException c'est discutable.

    Citation Envoyé par giova_fr Voir le message
    Quels astuces pourriez vous me donner à ce sujet?
    KeyNotFoundException : vérifier que la clef utiliséé existe bien dans le dictionnaire avant d'essayer d'avoir la valeur associée.

    NullReferenceException : tu codes ton logiciel donc tu crées des classes, fonctions etc. Il est recommandé que pour les fonctions recevant des paramètres type référence de toujours vérifier dès la première ligne de la fonction que les paramètres obligatoires sont renseignés donc différents de null. Si c'est null alors tu balances l'exception ArgumentNullException qui là pour ça exactement. Si tu déclenches cette exception alors dans la StackTrace du code appelant tu auras le nom du paramètre et aussi le nom de la fonction concernée.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Je ne peux que te donner raison là dessus.

    En fait, cela fait 2 ans que mon logiciel évolu, je me retrouve donc avec des dicos ou autres trimbalés de methodes en methodes. Celles en haut de la pile font les vérifs comme tu l'as souligné.

    Puis un beau jour on intercalle une methode au milieu de tout ça. On se dit, "c'est bon, ma variable elle a été vérifiée N fois par les autres methodes en amont "

    Et oui je sais faudrait faire du TDD, mais c'est toujours là même chose, on a pas le temps de trop en faire sinon on n'avance plus.

    Bref j'ai 10000 lignes de code et des fois quelques impasses, assez lourd à débugger vu le manque d'infos. En même temps si je faisais tout parfaitement comme il faut je n'aurai pas fais le 1/3 du boulot

    Alors j'esperai un petit miracle à mettre dans mon catch du dernier espoire (celui qui envoit un rapport d'erreur au serveur).

  9. #9
    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
    Citation Envoyé par giova_fr Voir le message
    Alors j'esperai un petit miracle à mettre dans mon catch du dernier espoire (celui qui envoit un rapport d'erreur au serveur).
    Faut voir du coté des framework d'instrumentation, mais ça fait pas des miracles non plus (par exemple, ca ne fait pas repousser les cheveux, et je le déplore ).

    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

Discussions similaires

  1. "Gestion des exceptions" dans SQL PLUS
    Par Jimmy91 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 10/04/2015, 15h37
  2. exceptions.h, vers une gestion plus facile des exceptions
    Par nojhan dans le forum Contribuez
    Réponses: 1
    Dernier message: 15/04/2014, 11h40
  3. Réponses: 8
    Dernier message: 23/07/2013, 15h49
  4. Réponses: 3
    Dernier message: 25/07/2002, 10h42
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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