600 likes | 679 Views
Et si Sherlock Holmes faisait du debugging. LAN401 – Microsoft Techdays 9 février 2011 – 11h-12h Gilles Guimard Julien Crozon. Présentation des speakers. Julien Crozon Tech lead Société Générale Corporate Investment Banking http://bugslasher.net crozon@gmail.com Gilles Guimard
E N D
Et si Sherlock Holmes faisait du debugging LAN401 – Microsoft Techdays 9 février 2011 – 11h-12h Gilles Guimard Julien Crozon
Présentation des speakers • Julien Crozon • Tech lead • Société Générale CorporateInvestmentBanking • http://bugslasher.net • crozon@gmail.com • Gilles Guimard • Application Dev Manager • Microsoft France • http://blogs.msdn.com/gillesg/ • gillesg@microsoft.com
Microsoft Services:Un accompagnement global de nos clients Architecture & Planning Planification Conseil et Projets Déploiement et adoption Support Optimisation et Opération Support Premier Consulting Services Enterprise Strategy • Division Services France 2010 • 180 Consultants • 125 TechnicalAccount Managers • 190 Ingénieurs Support • 17 Responsables de Mission • 41 Partenaires référencés • Division Services Monde 2010 • 82 pays couverts • 18 000 employés • 35 000 partenaires • 44 langues parlées par nos ingénieurs Evaluation Développement Stabilisation Support Planification Opérations Déploiement www.microsoft.fr/services
Notre positionnement est d’intervenir sur les projets critiques et les technologies récentes Criticité du projet • Notre engagement auprès de nos partenaires est : • De leur assurer un transfert d’expertise, • De leur apporter notre support sur les dernières technologies, • De leur donner accès aux meilleures pratiques de mise en œuvre et de support. Partenaires Maturité de la technologie • Nos clients et partenaires sont particulièrement satisfaits par… • Le niveau d’engagement des consultants : 94% • La gestion de l’équipe de projet : 92% • Les compétences techniques des consultants : 91% • La relation avec les équipes du client : 90%
De quoi va-t-on parler ? • De la philosophie de l’enquêteur • Des outils indispensables à tout détectiveinformatique • Des recettes pragmatiques pour débusquer lesbugs • Des crimes les plus courants
Où l’on ressent le désarroi du développeur « Je comprends pas, ça marchait chez moi… » Un développeur souhaitant rester anonyme Démo
Comment les traque-t-on ? Qu’est-ce qu’un bug ? Les trois outils principaux de l’apprenti détective Travaux pratiques : le vol de temps Travaux pratiques : la mort du processus
Où l’on parle de bugs (et de la meilleure façon de les traquer) « …un fait hors de l’ordinaire est plutôt un indice qu’un embarras… » Sir Arthur Conan Doyle « Un bon bug est un bug mort » General Lee
Un bug est avant tout… • Un dysfonctionnement ? • Oui mais pourquoi faire ? • Une source d’ennui ? • La meilleure façon de rester tard le soir ? NON ! Un bug est une excellente occasion de devenir un meilleur chasseur de bug
Pour l’argent • Un bon détective est mieux payé • A des arguments lors des négociations salariales > « Si je n’avais pas été là… »
Pour la gloire Un bon détective obtient la reconnaissance de ses collègues • Détenteur d’une sagesse : « celui qui sait » • Plus on chasse les bugs, plus on apprend à les chasser
Pour le bonheur • Un bon détective est plus heureux • Etant sur de ses capacités, il subit moins de stress • Etant plus rapide à trouver les coupables, il rentre moins tard • Vie personnelle plus épanouie
Comment les traque-t-on ? Qu’est-ce qu’un bug ? Les trois outils principaux de l’apprenti détective Travaux pratiques : le vol de temps Travaux pratiques : la mort du processus
Le secret d’un bon détective …ou les 9 étapes d’une enquête rondement menée « Rien n’est petit pour un grand esprit » Arthur Conan Doyle « J’aime qu’un plan se déroule sans accroc » Colonel John Hannibal
Etape 1Se préparer • Se concentrer • S’assurer d’avoir le temps de se pencher sur le problème (pas de précipitation) • Etre zen et avoir une attitude positive « …[Sherlock Holmes] était en veston d’intérieur, paresseusement étendu sur un sofa ; à portée de sa main une pipe et une pile de journaux… » Arthur Conan Doyle
Etape 2 Demander la description des symptômes • Personne à joindre • Date d’occurrence, date de première occurrence • Version des binaires/OS/etc. • Quels sont les symptômes, et comment les reproduire • Tout se joue à cette réponse ; on caractérise ici les problèmes reproductibles ou intermittents • Y-a-t-il d’autre symptômes en relation « Peut-être me suis-je entrainé à voir ce que d’autres ne voient pas…Sinon d’ailleurs, pourquoi seriez-vous venue me consulter ? » Arthur Conan Doyle
Etape 3Reproduire les symptômes • Ne surtout pas sauter cette étape : c’est la seule qui permettra d’être sûr d’avoir corrigé • Si le problème est intermittent, définir un plan qui permettra de valider qu’on a résolu le problème • Si il y a une occurrence toutes les X minutes, la probabilité que le problème ne soit pas apparu après Y minutes est (exemple : pour une fois toutes les 10 minutes, on a 7% de chance que rien ne soit arrivé au bout de 40 minutes, ou 0,25% au bout de 80 minutes) « Chercher une explication avant de connaitre tous les faits est une erreur capitale. Le jugement s’en trouve faussé. » Arthur Conan Doyle
Etape 4Vérifier les taches de maintenance • Contrôler que toutes les mises à jour ont été faites • Binaires • Données • Etc.
Etape 5Débusquer le bug 1/2 • Diviser l’espace des possibilités • Une simple recherche par dichotomie permet en 20 étapes de trouver parmi un million de fonctions laquelle pose problème • Mathématiquement, si on vous donne suffisamment de temps, vous êtes SURS d’y arriver « Lorsqu’un fait semble contredire une longue suite de déductions, c’est qu’on l’interprète mal » Arthur Conan Doyle
Etape 5Débusquer le bug 2/2 • Préférer l’analyse du comportement à l’approche différentielle • Répondre à “pourquoi ?” plutôt qu’à “qu’est-ce qui a changé ?” (les deux sont cependant souvent nécessaires) • Ne pas hésiter a tester certaines hypothèses peu probables si elles sont rapides à essayer • Connaitre le rasoir d’Ockham • Revenir en arrière pour tester une hypothèse qui semblait peu probable avant, mais qui maintenant parait plus intéressante « Lorsque vous avez éliminé l’impossible, ce qui reste, si improbable soit-il, est nécessairement la vérité » Arthur Conan Doyle
Etape 6Corriger • En exclusivité, les trois niveaux de qualité d’une correction • Niveau 1 : elle marche • Niveau 2 : elle marche et vous savez pourquoi • Niveau 3 : elle marche, vous savez pourquoi, et elle explique tous les comportements du système observés lors des étapes précédentes
Etape 7Tester que la correction marche • Rester honnête • Ne pas se laisser emporter (pour le moment) par la joie d’avoir peut-être trouvé
Etape 8Exulter (très fort) • S’autoriser un moment d’autocongratulation • Répandre la nouvelle, expliquer comment VOUS avez trouvé le coupable • Souvenez-vous où vous avez été bon, où vous auriez pu être meilleur « Élémentaire mon cher Watson » Sir Arthur Conan Doyle
Etape 9Prévenir les occurrences futures • Faire une correction défensive : qu’il soit difficile pour un autre développeur ou utilisateur de le rencontrer de nouveau • Si besoin, automatiser une vérification • Documenter les symptômes et la correction effectuée • Expliquer comment éviter le problème à l’utilisateur
Finalement, un bon détective doit être équipé… • De son cerveau…et de la connaissance de quelques outils • D’optimisme (je vais y arriver) • De ténacité (je vais vraiment y arriver !) • De curiosité (tiens, comment ça marche ?) • De pragmatisme : essayer de trouver la meilleure solution en terme de rapidité et de faisabilité • De scepticisme : TOUJOURS vérifier soit même (si possible) les affirmations des autres • De calme : ne pas se laisser envahir par les émotions (colère, stress, etc.)
Comment les traque-t-on ? Qu’est-ce qu’un bug ? Les trois outils principaux de l’apprenti détective Travaux pratiques : le vol de temps Travaux pratiques : la mort du processus
Ou l’on découvre trois “outils” que se doit de connaitre tout apprenti détective • Les symboles • Les dumps • Les debuggers
Les symboles : l’œil de l’ enquêteur (et pourquoi ne peut-on s’en passer)
Qu’est-ce qu’un symbole ? • Requit pour réaliser une analyse via un debugger • Produit lors du "link" de l'application • Debug / Release • Symboles privés / public • Les symboles de Microsoft
Les symboles • La gestion des symboles • Les solutions d'industrialisation • TFS 2010, Symstore, PowerShell… Construction Serveur de compilation Stockage physique des symboles Lien symbolique Serveur HTTP SymProxy
Les symboles • La gestion des symboles • Les solutions d'industrialisation • TFS 2010, Symstore, PowerShell… Debugger Debugger Utilisation Firewall Serveur de symbole Microsoft http://msdl.microsoft.com/downaload/symbols Serveur de compilation Stockage physique des symboles Serveur HTTP SymProxy
Les symboles • Dans les outils • Tools / Options / Symbols • Srv*<Cache>*<Serveur> Les Outils
Démo Les symboles Serveur de symbole SymStore, Visual Studio IDE
Qu’est-ce qu’un dump ? • Sous Windows, un fichier avec l’extension .dmp • Il contient un instantané de l’état du processus au moment de la prise du dump • On peux choisir de n’avoir que le minimum d’informations (le thread courant et sa callstack), ou toute la mémoire • Est utilisé dans l’analyse « post mortem »
Comment génère-t-on un dump ? • Avec ProcDump de SysInternals • Permet de dumper en cas d’exception • Permet de dumper a intervalle régulier • Permet de dumper quand on consomme trop de CPU • Etc. • Avec Process Explorer de SysInternals • Clic droit sur un processus, « Create dump » • Avec WinDbg • Commande « .dump [/ma] <nom de fichier>» • Avec le TaskManager • Clic droit sur un processus, « Create dump file » • Avec Visual Studio • Menu « Debug », « Save Dump As… »
Démo Créer un dump sur exception ProcDump, Visual Studio IDE
L’analyse des dumps : un vaste sujet… 722 pages 404 pages 472 pages 424 pages 400 pages
Les Debugger • Les Outils • Visual Studio • Debugging Tools for Windows • Windbg.exe, ntsd.exe, cdb.exe • Les fonctionnalités • Debugging interactif (debug Live) • Ouvrir un "dump" mémoire et l'analyser (post mortem) • Debug Local ou via le réseau • Debugging en mode kernel • Nécessite les symbole pour éviter que l’enquête ne dure pas plusieurs semaines, mois?
Visual Studio 2010 • Le Debugger • Points d’arrêt conditionnels, trace point • Fenêtre de Watch, les Pseudo Register • Fenêtre Immédiate, les commandes de type NTSD • Les nouveauté • Nouveaux point d’arrêt conditionnels sur des chaines • Fonctions de débogage multithread et parallèle • Analyse de dump mémoire • Importation / exportation de points d'arrêt
Démo Le debugger de Visual Studio 2010 Visual Studio IDE
Comment les traque-t-on ? Qu’est-ce qu’un bug ? Les trois outils principaux de l’apprenti détective Travaux pratiques : le vol de temps Travaux pratiques : la mort du processus
Crime #1 : la mort du processus Les leçons de Sherlock Holmes
Pour quelle raisons un processus peut-il disparaitre ? • Meurtre commandité (appel de kill depuis l’extérieur) • Mort naturelle (fin de la fonction Main) • Suicide (appel de ExitProcess() ) • Crime (exception non rattrapée)
Comme souvent, la façon de trouver le coupable dépend de la nature du crime • Reproductible • S’attacher avec un debugger • Si reproductible uniquement sur le poste client ou sur un serveur (sans debugger d’installé), vous pouvez • Copier les fichiers de debugging distant de Visual Studio (situés dans <répertoire d’installation>\Common7\IDE\<architecture>) et utiliser Visual Studio à distance • Utiliser WinDbg en local ou à distance avec son compagnon cdb.exe • Intermittent • Programmer un dump avec ProcDump • Utiliser l’option –t (dump on Terminate) en cas de fin normale • Utiliser l’option –e (dump on Exception) en cas de fin avec exception
Démo Debugger le démarrage d’un service Un truc du docteur Watson GFlags, Visual Studio Just-in-time Debugger, Visual Studio IDE
Le cas particulier des arrêts (très) intermittents de processus • Il existe un outil Microsoft qui permet de debugger un logiciel sans intervention humaine : ADPlus • Permet de donner des conditions très spécifiques de créations de dumps (seulement après passage dans telle fonction, seulement si un type particulier d’exception arrive, etc.) • Se base sur des scripts de type WinDbg • Peut agréger plusieurs surveillances de processus à distance • Livré avec le package « Debugging Tools for Windows »
Comment les traque-t-on ? Qu’est-ce qu’un bug ? Les trois outils principaux de l’apprenti détective Travaux pratiques : le vol de temps Travaux pratiques : la mort du processus