debugging n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Debugging PowerPoint Presentation
Download Presentation
Debugging

Loading in 2 Seconds...

play fullscreen
1 / 95

Debugging - PowerPoint PPT Presentation


  • 109 Views
  • Updated on

Debugging. Élémentaire. Objectif du chapitre. Premier contact avec les outils de mise au point Génération en vue de debug Usage des points d’arrêt, pas à pas Visualisations diverses Code Variables Mémoire Pile …. Objectifs (1).

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

Debugging


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
    Presentation Transcript
    1. Debugging Élémentaire Debug

    2. Objectif du chapitre • Premier contact avec les outils de mise au point • Génération en vue de debug • Usage des points d’arrêt, pas à pas • Visualisations diverses • Code • Variables • Mémoire • Pile • … Debug

    3. Objectifs (1) • La mise au point de programmes (debugging) nécessite l’emploi de techniques particulières • Platform Builder offre • Un ensemble d’outils usuels • Exécution du programme en pas à pas • Pose ou suppression de points d’arrêt • Visualisation des variables, de la mémoire, des registres • Suivi des enchaînements de fonctions, etc. • Un outil « Kernel Tracker » pour visualiser la chronologie des exécutions Debug

    4. Objectifs (2) • Pour utiliser les possibilités de mise au point, la cible doit être construite dans le mode particulier « Debug » par opposition au mode « Release » qui correspond à une version d’exploitation • Étude du debugger en deux phases • Visualisations diverses, Breakpoint, etc. • Kernel Tracker ultérieurement Debug

    5. Point de départ • Générer une plate-forme en mode Debug • Créer et générer une application avec un main et des fonctions très simples • Exploration (partielle) de l’outil de debug • Messages • Visualisation du code source • Breakpoint • Visualisation des variables, de la mémoire • Visualisation du code assembleur • Visualisation de la pile Debug

    6. Génération de la plate-forme « Debug » • Utiliser l’assistant, comme précédemment, avec éventuellement un nouveau nom • Au pas 6 de l’assistant, modifier les options • Cocher dans les options de la liste « Debug » : « Enable Image Larger than 32 MB » • Sortir de l’assistant par « Finish » • Sélectionner la configuration active « Debug » • Générer la plate-forme (Build Platform) Debug

    7. Modification des options Debug

    8. Sélection de la taille des images Debug

    9. Sélection configuration : Debug Debug

    10. Génération de la plate-forme Debug

    11. Génération de l’image Debug

    12. Exécution d’une application • Sans inclusion dans l’image Création du .exe Téléchargement du noyau Éxécution par la commande « Run Program » • Avec inclusion dans l’image Création du .exe Refaire une image avec choix de l’option d’insertion Téléchargement du noyau avec l’application Exécution à partir de la cible par la méthode Windows Debug

    13. Options de génération • Pour voir les options de génération avec ou sans inclusion, nous prenons une application de type WCE Application • Noms de nos applications écrits en majuscules pour les distinguer facilement des applications proposées par Windows CE • Nom de l’application : BRKP • Nous ajouterons le code par la suite Debug

    14. Choix de l’option pour le projet Debug

    15. Inclusion application dans l’image Debug

    16. Exclusion application de l’image Debug

    17. Application BRKP • Faire la somme et le produit de deux nombres entiers positifs avec • Une fonction somme • Une fonction produit • Des variables statiques • Des variables dynamiques • Des passages d’arguments • Introduire des messages de contrôle Debug

    18. Messages d’aide à la mise au point • Édition habituelle de messages de contrôle dans l’application par des printf ou équivalents • En plus, édition de messages par des macros dans la fenêtre de sortie de l’émulateur, et non dans le contexte de la cible • RETAILMSG en version Retail • RETAILMSG et DEBUGMSG en version Debug Debug

    19. Macro RETAILMSG • RETAILMSG(cond, printf_exp) • Impression si la condition est vraie de ce qu’on mettrait dans un printf • Impression faite par une fonction équivalente à printf mais qui écrit dans la fenêtre de sortie de l’émulateur et non dans la cible émulée Exemple : RETAILMSG(1,(TEXT("Main: adresse de i= %x\n"),&i)); Équivalent dans la fenêtre de sortie à : printf("Main: adresse de i= %x\n",&i); Debug

    20. Application BRKP (1) #include "stdafx.h"   //prototypes des fonctions DWORD dwSomme(DWORD dwA,DWORD dwB); DWORD dwProduit(DWORD dwA,DWORD dwB); DWORD dwValeur; //juste pour avoir une variable statique int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) Debug

    21. Application BRKP (2) { DWORD i,j; //Visualisation des adresses dans la fenêtre de sortie RETAILMSG(1,(TEXT("Main: adresse de i= %x\n"),&i)); RETAILMSG(1,(TEXT("Main: adresse de j= %x\n"),&j)); RETAILMSG(1,(TEXT("Main: adresse de valeur= %x\n"),&dwValeur)); //Calcul de somme et produit des entiers positifs 5 et 3 i=5; j=3; Debug

    22. Application BRKP (3) RETAILMSG(1,(TEXT("Main: i=%u j=%u\n"),i,j)); dwValeur=dwSomme(i,j); RETAILMSG(1,(TEXT("Main: i+j=%u\n"),dwValeur)); printf(("Main: i=%u j=%u dwValeur =%u \n"),i,j,dwValeur); dwValeur=dwProduit(i,j); RETAILMSG(1,(TEXT("Main: i*j=%u\n"),dwValeur)); printf(("Main: i=%u j=%u dwValeur =%u \n"),i,j,dwValeur); getchar(); return 0; } Debug

    23. Application BRKP (4) DWORD dwSomme(DWORD dwA,DWORD dwB) { //Addition de A et B par une méthode archaïque DWORD dwC=0; while(dwA--) dwC++; while(dwB--) dwC++; return dwC; } Debug

    24. Application BRKP (5) DWORD dwProduit(DWORD dwA,DWORD dwB) { // Multiplication de A et B par une méthode simpliste DWORD dwC; for(dwC=0;dwB;dwB--) dwC=dwSomme(dwA,dwC); return dwC; } Debug

    25. Option de génération en mode debug Debug

    26. Configure Remote Connection Debug

    27. Configure Emulator Download Service Debug

    28. Insertion et suppression de breakpoints • Les breakpoints peuvent être placés ou enlevés avant ou après le lancement de l’application • Avant lancement du noyau • Positionner le curseur souris sur une ligne du programme • Faire un click droit pour ouvrir le menu • Faire Insert/Remove Breakpoint • Après lancement du noyau, il faut que le debugger soit arrêté Debug

    29. Fenêtres en debug • Dans la fenêtre principale de Platform Builder la fenêtre Workspace est différente et donne accès à des commandes après chargement de la cible • D’autres fenêtres sont spéciales pour le debug et accessibles par le menu View, sous-menu Debug Windows, ou par une barre de contrôle • Fenêtres libres ou ancrées en fenêtre principale • Mémorisation des caractéristiques des fenêtres • Fermeture par l’icône Windows Debug

    30. Exemple : fenêtre des variables Debug

    31. Écran avec la fenêtre des variables Fenêtre nouvelle disponible pour des commandes lignes (shell) Variables Fenêtre principale Debug

    32. Groupe de fenêtres flottantes Debug

    33. Exemple de fenêtres ancrées Registres du CPU Fenêtre nouvelle disponible pour des commandes lignes (shell) Fenêtre principale Watch Contexte Fenêtre de sortie Debug

    34. Barre de commande « Debug » • Ouverte comme toutes les barres de commandes par un click droit dans une barre existante et coche de la case • Une série d’icônes correspond à des commutateurs pour l’ouverture ou la fermeture des fenêtres de debug • Une autre série correspond à l’exécution du code : Go simple (jusqu’à un point d’arrêt), pas à pas, avec saut d’une fonction, etc. • Les bulles d’aide sont explicites Debug

    35. Essai de BRKP • Génération de la plate-forme • Génération de l’application • Génération de l’image • Téléchargement du noyau avec ou sans l’application suivant les choix • Exécution du programme • Fermeture de la cible • Déconnexion Debug

    36. Après téléchargement de la cible Debug

    37. Cible vierge Debug

    38. Exécution par la commande shell Commande du shell s BRKP s pour start Debug

    39. Fenêtres du debugger après exécution Messages Messages Debug

    40. Cible après exécution Attente du caractère Entrée Taper Entrée pour finir BRKP Debug

    41. Pose d’un breakpoint • Pose avant ou pendant la session de debug • Placer le curseur sur une ligne de code • Ouvrir le menu contextuel par un click droit • Insérer un point d’arrêt, marqué par un rond rouge en marge (en fait c’est un commutateur qui insère ou supprime un point d’arrêt) • Relancer le programme s’il ne l’est pas • Au début, on doit observer une flèche jaune superposée au premier point d’arrêt Debug

    42. Arrêt du debugger Icône d’arrêt Debug

    43. Après pose des points d’arrêt Debug

    44. Arrêt sur point d’arrêt Debug

    45. Exécution du programme en debug • Chaque commande Go (menu ou icône) provoque l’exécution du programme jusqu’à : • Rencontre d’un point d’arrêt • Rencontre d’une erreur d’exécution • Fin normale du programme • La commande « Run Program » charge le programme dont on donne le nom puis déclenche une commande Go • Exécution contrôlée en pas à pas par diverses commandes d’avance Debug

    46. Avance d’un pas • Avance par • Le menu « Debug » • Les touches de fonction du clavier • Les icônes (dessins et bulles explicites) • Plusieurs types d’avance • Un pas dans la fonction (Step Into) • Un pas en sautant la fonction (Step Over) • Un pas en ressortant de la fonction (Step Out) • Jusqu’au curseur (Run to Cursor) Debug

    47. Avance d’un pas simple Avance un pas Debug

    48. Après avance d’un pas simple Fenêtre des variables i à jour, j ? Messages Debug

    49. Avance d’un pas avec saut Avance avec saut Avance avec saut de la fonction pour ne pas exécuter toute la fonction en pas à pas j à jour Debug

    50. Avance avec sortie de la fonction • Ce type de pas (Step Out) permet de cesser l’examen d’une fonction en pas à pas en retournant directement chez l’appelant • Utile quand on est entré par inadvertance dans une fonction déjà au point qu’on ne désire pas dérouler en pas à pas • Utile en particulier quand on est entré dans une fonction fournie par Platform Builder pour laquelle on ne dispose pas du code source Debug