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

ASP.NET Discussion :

Debug en prod


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Debug en prod
    Bonjour,

    J'ai un traitement qui passe tres bien sur mon serveur de dev et de pre-prod et plante en production. Est il possible de faire un debugage en Prod ?

    Merci pour vos conseils.

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Ma petite expérience me dit que ce n'est pas conseillé
    Cependant, un DebugDiag en prod pour catcher les crash ou Hang IIS et une analyse des logs avec WinDgb s'est pour ma part souvent avéré être un super moyen de détecter des erreurs en production.

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    En recherchant j'ai vu qu il existait Remote Debugger, qq un a t il un retour l'experience ?

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Des try catch et une gestion des logs appropriés
    Et le tour est joué

    Une appli ne devrait jamais planter sans qu'on sache la source de l'erreur

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 464
    Par défaut
    try/ catch, c'est beaucoup trop invasif.

    C'est gestion doit être externe au programme, AutoDumpPlus (http://support.microsoft.com/kb/286350/fr) permet de générer un dump automatiquement en cas de crash ou de Hang IIS, et cela sans offusquer le code avec des try/catch qui ne font que cacher le problème (et encode, s'ils ont accès malin pour ne pas catcher des OutOfMemory ou de StackOverFlow)

    A bas les try/catch imbéciles.

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par bacelar Voir le message
    try/ catch, c'est beaucoup trop invasif.

    C'est gestion doit être externe au programme, AutoDumpPlus (http://support.microsoft.com/kb/286350/fr) permet de générer un dump automatiquement en cas de crash ou de Hang IIS, et cela sans offusquer le code avec des try/catch qui ne font que cacher le problème (et encode, s'ils ont accès malin pour ne pas catcher des OutOfMemory ou de StackOverFlow)

    A bas les try/catch imbéciles.
    Mince, et moi qui mets que des try/catch imbéciles ...

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Pour ma part, je ne suis jamais parvenu à obtenir un dump avec ADPlus, d'ou mon conseil de regarder du côté de DebugDiag (très probablement à cause d'une mauvaise utilisation de ma part bien sûr).

    Cependant, je suis assez d'accord sur le fait que la meilleure solution étant bien sûr de tester avant mise en prod, il faut mieux utiliser un outils pour tracer l'origine du problème que de la contourner par des Try/Catch couteux qui ne feront que le masquer.

    Epineux problème que la gestion des exceptions...

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Nan mais faut arrêter de dire que les try/catch masque l'erreur, à moins que vous laissiez le catch vide

  9. #9
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Le seul problème avec les try/catch c'est que c'est horriblement lent.

    Après, ça ne masque pas l'erreur, ça reste au développeur de fournir le moyen à l'utilisateur de savoir pourquoi ça plante.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par laedit Voir le message
    Le seul problème avec les try/catch c'est que c'est horriblement lent.

    Après, ça ne masque pas l'erreur, ça reste au développeur de fournir le moyen à l'utilisateur de savoir pourquoi ça plante.
    Seulement en cas de plantage, ce qui ne devrait pas arriver trop souvent, non?

  11. #11
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Tout dépend de l'appli et de comment elle a été structuré, mais généralement oui, ça ne devrait pas arriver trop souvent.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  12. #12
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Je ne suis pas sûr que les try\catch sont horriblement lent.... Pour moi ce sont des à priori. J'ai personnellement fait des tests de charge, et les résultats ne mettent pas en évidence des chutes de performances. On à même tendance à dire que catcher des exceptions typés et moins coûteux que de catcher une exception globale. Ce que je pensais également avant de faire les tests. Tout dépend de l'application, de ce qu'il y dans le try catch, de la gestion des exceptions (nombre de couche d'exception)... Mais globalement, ça ne coûte pas cher de gérer cela proprement, et de remonter des exceptions typés.

  13. #13
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Pour l'avoir testé, il se passe quand même un temps entre le moment où l'exception est levée et celui où elle est "catchée".
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  14. #14
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Ok, donc tu catches rien.
    Et quand ça plante, t'affiches quoi au client? Une page d'erreur sans traitement? T'attends que le client remonte le problème avant de te rendre compte qu'il y a un truc qui cloche dans ton appli?

  15. #15
    Membre confirmé
    Avatar de chemanel
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 173
    Par défaut
    Les try/catch ne changent rien au niveau de la vitesse d'exécution du code... excepté quand y'a une exception qui est levée, mais c'est mieux ça et de la traiter correctement (log/envoisemail, etc) que de l'afficher bêtement au client.

    Le seul défaut des try/catch, c'est lors de la compilation, je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int i = 0;
    i = 3;
    i++;
    Prenons ce code, si c'est hors d'un try / catch, le compilateur va optimiser le code compilé en :



    Le problème avec les try/catch, c'est que du a leurs utilisation, le compilateur n'optimise absolument rien de ce qui est a l'intérieur !

    Donc utilisez les try/catch a bon escient ! Ne faite pas des try catch vide, ni des try catch contenant des bête throw... l'erreur remontera d'elle même si il faut, pas besoin de la relancer, ça la lance pas plus vite :-)

    A BANNIR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
       ...
    }
    catch (Exception)
    {
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
       ...
    }
    catch (Exception ex)
    {
         throw ex;
    }


    SINON ... pour revenir au sujet du post... Tu as aussi les trace.axd qui peuvent grandement t'aider, tu vois ce que c'est?

  16. #16
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Les traces axd sont generes lorsque je mets les traces d'une page a true, c ca ?

  17. #17
    Membre confirmé
    Avatar de chemanel
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 173
    Par défaut
    Citation Envoyé par topolino Voir le message
    Les traces axd sont generes lorsque je mets les traces d'une page a true, c ca ?
    Oui c'est ça, plus d'info ici :

    http://blogs.crsw.com/mark/archive/2005/04/06/827.aspx

    Donc tu l'active, a chaque requête faite, t'as une nouvelle ligne dans ton fichier /dossier/trace.axd, tu cliques sur view detail, et t'auras les détails de la vie de ta requete.

    Tu peux aussi manuellement écrire dedans en fesant des Trace.Write (ou Output je sais plus) pour écrire des infos dedans...

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 464
    Par défaut
    Try/Catch pour du log ou du pseudo traitement d'erreur, c'est idiot.

    Quand l'application plante, vous avez un débuggeur en ligne pour faire un dump de l'application à tous les niveaux du processus de fermeture de l'application et vous avez un programme WatchDog qui est à même de relancer l'application.

    En ASP.NET, les Evénements des AppDomain feront largement l'affaire pour faire un dump ou vos si chères traces. Mais vous n'aurez qu'un code délicat à faire, sur ces évènements. Vous ne serez pas dépendant d'un stagiaire qui oublie in try/catch, ou pire, qui try/catch sans faire de throw ex (moi, je préfère des finaly) ou qui trace n'importe comment.

    Je persiste, les try/catch/finaly, c'est pour gérer des erreurs connues, ET PUIS C'EST TOUT.
    Et là, on ne met même pas en branle les contenairs d’IoC type Spring.NET ou EntLib et leurs intercepteurs, que les "traitements" sauvages des exceptions rendent inopérants.
    Les exceptions coûtent chères quand elles s’exécutent. Qaund on les catche n’importe comment, elles s’exécutent souvent et pendant longtemps.

  19. #19
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    T'as pas répondu à

    Et quand ça plante, t'affiches quoi au client? Une page d'erreur sans traitement? T'attends que le client remonte le problème avant de te rendre compte qu'il y a un truc qui cloche dans ton appli?

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 464
    Par défaut
    Quand ça plante, je créer un dump (mini ou pas), j'affiche une boite de dialogue à l'utilisateur, je zippe le dump, j'envoie un email avec le zip au mail de support (ou le chemin vers un partage ou est le dump), je relance l'application, avec des paramètres particuliers si nécessaire ou un watchdog etc...
    Tout ça avec un simple fichier de configuration du débuggeur en ligne (CDB, NTSD ou autre) et quelques VBS si nécessaire.

    En cas de plantage,
    D’exception non catché dans un thread auxiliaire,
    Au moment du lancement d'une exception catché,
    Au moment du passage du compteur de programme à une valeur donnée,
    En cas de Hang IIS,
    Sur demande utilisateur,
    Sur déclanchement sur seuil Perfmon,
    etc...

    Et ça, c'est sans les outils d'analyse automatiques des dumps pour alerter via Task TFS le développeur du dernier workItem TFS ayant modifié la ligne incriminé.

    S'il y a un manque, je pense que je pourrais me l'implémenter.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/06/2011, 12h02
  2. Debug en prod
    Par topolino dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/08/2009, 16h42
  3. Doc sur Debug de Ms-Dos
    Par gtr dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/09/2003, 09h06
  4. [debug] performances / optimisation
    Par tmonjalo dans le forum C
    Réponses: 2
    Dernier message: 28/07/2003, 23h45
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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