| DebugApp : Débogage dune application avec Project Builder Version française de Nicolas Descombes La version originale au format PDF se trouve sur le site de Nicolas Descombes : http://trad.applescript.free.fr/ . Préambule - Ce tutoriel nest absolument pas une traduction officielle de la Société Apple.
- Ce tutoriel est un essai de traduction française de DebugApp:Debugging an Application With Project Builder, documentation technique Apple.
- Dans lespoir que cette version française comblera lattente de tous les utilisateurs francophones, je vous souhaite une bonne lecture.
- Un utilisateur Mac francophone
- Merci à Daniel et Laurent pour leur aide et leurs conseils indispensables.
Marques déposées: Apple, le logo Apple, AppleScript, AppleTalk, AppleWorks, Finder, LaserWriter, Mac, Macintosh et PowerBook sont des marques déposées de Apple Computer Inc. Toutes les autres marques sont la propriété de leurs détenteurs respectifs.
DebugApp : Débogage dune application avec Project Builder Ce tutoriel montre comment déboguer un projet avec Project Builder. Dans ce tutoriel, vous allez construire un projet de débogage, régler des points darrêt, exécuter pas à pas le code et examiner les données. Vous allez aussi apprendre comment entrer des commandes dans GDB, loutil de commandes en ligne, utilisé par Project Builder comme debugger. Ce tutoriel suppose quelques connaissances en programmation Mac OS X et davoir déjà utilisé un autre logiciel de débogage. Ce tutoriel comporte les parties suivantes : - Construire une application débogable
-
- Régler un point d'arrêt
-
- Lancer le débogage d'une application
-
- Exécution du code pas à pas
-
- Examen des données
-
- Utilisation des commandes en ligne de GDB
-
- Arrêt de Debugger
Construire une application débogable Dans cette section, vous allez créer un nouveau projet et activer loption pour la production des informations de débogage. - 1. Créez un nouveau projet.
- Choisissez File > New Project. Sélectionnez Carbon Application, et cliquez sur Next. Saisissez DebugApp pour le nom du projet, choisissez un emplacement pour lenregistrement, puis cliquez sur Finish. Project Builder crée alors un nouveau projet et ouvre sa fenêtre. Le projet contient déjà des fichiers modèles que vous pouvez compiler et exécuter tel quel.
-
- 2. Cliquez sur longlet Targets situé sur le côté droit de la liste des fichiers, sélectionnez DebugApp, puis cliquez sur longlet Build situé juste en haut de la fenêtre affichant le code. En cliquant sur ce dernier onglet, les réglages des options de construction devraient apparaître.
-
- 3. Vérifiez que loption Generate debugging symbols est activée. Si vous ne pouvez pas visualiser cette option, cliquez sur le triangle situé à côté des réglages du compileur.
- À présent, lorsque vous construirez lapplication, Project Builder y inclura les informations de débogage.
-
- 4. Cliquez sur le bouton Build (le marteau) situé dans la barre doutil de la fenêtre du projet.
Régler un point darrêt Vous pouvez régler les points darrêt directement dans Project Builder, même avant le lancement de Debugger. Project Builder sauvegarde les points darrêt lors de la fermeture du projet, de cette façon, vous les retrouvez à la prochaine ouverture. Cliquez sur longlet Files, ouvrez main.c, faites défiler la fenêtre jusquà ce que vous voyez la fonction main. Cliquez dans la marge à côté de linstruction Initialize, une flèche apparaît au niveau de cette instruction. En cliquant sur longlet Breakpoints, vous pourrez visualiser la liste des points darrêt. Depuis ce panneau, vous pouvez visualiser le code source pointé par un point darrêt, activer, désactiver ou supprimer le ou les points darrêt.
Lancer le débogage dune application Cliquez sur le bouton Build et Debug (une bombe aérosol devant un marteau) dans la barre doutil. Le panneau de débogage apparaît dans la partie haute de la fenêtre du projet. Project Builder lance lexécution de lapplication sous le panneau Debug et sarrête au point darrêt. Linstruction désignée par le point darrêt est affichée dans léditeur de code, elle est surlignée et une flèche rouge apparaît dans la marge gauche. Les boutons qui contrôlent les opérations de Debugger sont situés dans la barre doutil à droite. Vous les utiliserez dans Exécution du code pas à pas. - Pause suspend l'application et affiche l'instruction en cours d'exécution dans l'éditeur.
-
- Continue reprend l'exécution d'une application suspendue.
-
- Step Over exécute l'instruction suivante à l'intérieur de la même fonction.
-
- Step Into exécute la première instruction de la fonction suivante si son code est disponible. Step Into passe à la fonction suivante seulement si elle existe, dans le cas contraire, il ne se passe rien.
-
- Step Out exécute toutes les instructions suivantes de la fonction en cours, puis revient à la fonction qui a appelé cette fonction et se positionne, dans la fonction appelante, sur l'instruction suivant immédiatement celle de l'appel.
Pour activer GDB et pouvoir saisir des commandes en ligne, il vous suffit de cliquer sur longlet Console situé en haut du panneau Debug. Dans linterface de Project Builder, vous gèrerez plus de tâches, mais pour des tâches plus pointues, vous utiliserez GDB. GDB sera utilisé dans Utilisation des commandes en ligne de GBD. En dessous du panneau Debug, vous trouverez deux listes de fichiers. Ces listes indiquent, respectivement à droite et à gauche, la fonction et linstruction en cours. Vous les utiliserez dans Examen des données. - Le menu déroulant Threads affiche tous les threads de lapplication. Dans ce tutoriel, un seul thread exécute le code source de lapplication, les autres sont des threads systèmes qui gèrent les communications inter-applications et le Debugger. Sélectionner un thread provoque laffichage de sa chaîne dappel dans la liste des frames.
- La liste des frames affiche la chaîne dappel du thread sélectionné. Cliquer sur un frame provoque, laffichage de ses variables dans la liste des variables, et une flèche rouge apparaît, dans léditeur de code, à côté de son instruction généralement exécutée.
- La liste des variables affiche toutes les variables locales et globales visibles dans le frame sélectionné.
Exécution du code pas à pas À présent, vous allez utiliser les boutons Step Over et Step Into pour regarder lapplication sexécuter. - 1. Appliquez Step Over à la fonction Initialize.
-
- Project Builder exécute la fonction Initialize et sarrête à linstruction suivante MakeWindow.
-
- 2. Cliquez à présent sur le bouton Step Into.
-
- Project Builder affiche alors la première instruction de MakeWindow dans léditeur de code, et ses variables dans la liste des variables.
-
-
- 3. Regardons le sauter à linstruction if.
-
- Appuyez plusieurs fois, soit sur Step Into, soit sur Step Over, jusquà ce que la flèche rouge soit à côté de linstruction if. Notez que lorsque vous exécutez une fonction dont vous navez pas le code source (comme une fonction Carbon), les boutons Step Into et Step Over ont la même fonction.
-
- Appuyez de nouveau sur Step Into ou Step Over. Project Builder évalue alors linstruction if et va à linstruction SetPort.
-
- 4. Regardons le revenir à la fonction main.
-
- Appuyez sur Step Out. La flèche rouge retourne à la fonction main et se positionne à côté de linstruction MakeMenu.
-
Examen des données Dans cette section, vous allez examiner les données de lapplication avec Project Builder. - 1. Appliquons Step Into à EventLoop.
-
- Appliquez Step Over à MakeMenu puis Step Into à EventLoop. Vous devriez obtenir le résultat suivant :
-
-
- À présent, regardons la liste des variables :
-
-
- Elle na quune section, Locals, laquelle liste toutes les variables locales de la fonction EventLoop : la variable booléenne gotEvent et la structure event. Si cette fonction avait eu des arguments, ils y aurait une section Arguments.
-
- 2. Appliquons Step Over à linstruction WaitNextEvent et examinons lenregistrement event.
-
- Appliquez Step Over à WaitNextEvent. Puis cliquez sur le triangle à côté de event pour voir son contenu :
-
-
- Les valeurs sont toutes en rouge, indiquant quelles ont été modifiées depuis que la dernière instruction a tourné. Si vous le voulez, vous pouvez aussi développer la structure where de la même manière.
-
- 3. Appliquez Step Over à linstruction if.
-
- Notez que les variables sont en noir, car cette fois, les valeurs sont restées inchangées.
-
-
- 4. Reprenons lexécution de lapplication.
-
- Appuyez sur Continue.
-
Utilisation des commandes en ligne de GDB Project Builder débogue votre programme en envoyant des commandes à GDB, un débogueur GNU. Project Builder fournit une interface graphique qui gère les caractéristiques basiques de GDB, mais pour des travaux plus complexes, vous pouvez saisir directement des commandes dans GDB. Dans ce chapitre, vous allez utiliser GDB pour régler un point darrêt conditionnel, Project Builder ne sarrêtera à ce point que si la condition spécifiée est vraie. Notez que lorsque vous fermerez le projet, Project Builder sauvegardera vos points darrêt mais pas les conditions associées. Project Builder nenregistrera rien de ce qui a été saisi directement dans GDB. - 1. Suspendons lexécution du programme.
-
- Appuyez sur le bouton Pause.
-
-
- Project Builder suspend le programme et sarrête sur nimporte quelle instruction en cours dexécution. Ce sera généralement sur linstruction WaitNextEvent dans EventLoop, mais si ce nest pas le cas, ce nest pas très important.
-
- 2. Création dun point darrêt pour que le programme soit suspendu lorsque vous appuyez sur une touche du clavier.
-
- Faites défiler la fenêtre jusquà la fonction DoEvent, puis identifiez linstruction case keyDown. Linstruction à partir de laquelle, lappui sur une touche est géré. Après, cest une instruction qui règle la variable key. Comme nous voulons savoir quelle touche a été pressée, nous allons placer le point darrêt après cette instruction, au niveau de if (event->modifiers & cmdKey).
-
-
- 3. Continuons lexécution du programme.
-
- appuyez sur le bouton Continue.
-
-
- 4. Appuyons sur une touche dans lapplication.
-
- Lancez lapplication DebugApp en double-cliquant sur son icone dans le dock. Lapplication affiche alors sa fenêtre Hello. Appuyez sur nimporte quelle lettre du clavier.
-
- Project Builder passe alors à lavant-plan, suspend lapplication et affiche linstruction sur laquelle pointe le point darrêt.
-
- 5. Trouvons le numéro du point darrêt.
-
- Tout en haut du panneau Debug, cliquez sur longlet Console.
-
- La console de Debugger, qui permet de saisir les commandes de GDB, saffiche.
-
- Dans la console, saisissez info br pour afficher les informations concernant les points darrêt du programme. Vous devriez obtenir ce qui suit :
-
- (gdb) info br
- Number Type disp Enb Address What
- 1 breakpoint keep y 0x00003254 in main at main.c:21
breakpoint already hit 1 time- 2 breakpoint keep y 0x000037c4 in DoEvent at main.c:161
breakpoint already hit 1 time-
- Notez que le numéro du point darrêt dans DoEvent, en tout cas ici, est 2.
-
- 6. Créons à présent un point darrêt conditionnel.
-
- Saisissez cond <num> (key=='a'), où <num> est le numéro du point darrêt. Par exemple :
- (gdb) cond 2 (key=='a')
- (gdb)
-
- Maintenant, Project Builder mettra sur pause à ce point darrêt uniquement si vous appuyez sur la touche a. Vous pouvez le vérifier en saisissant info br de nouveu. Par exemple :
-
- (gdb) info br
- Number Type disp Enb Address What
- 1 breakpoint keep y 0x00003254 in main at main.c:21
breakpoint already hit 1 time- 2 breakpoint keep y 0x000037c4 in DoEvent at main.c:161
- stop only if key == 97 'a'
breakpoint already hit 1 time
- 7. Reprenons lexécution du programme.
-
- Appuyez sur le bouton Continue, puis cliquez sur licone de DebugApp dans le dock.
-
- 8. Appuyez sur q.
-
- Lexécution de lapplication nest pas suspendue.
-
- 9. Appuyez sur a.
-
- Project Builder passe à lavant-plan, suspend lapplication et affiche linstruction sur laquelle pointe le point darrêt.
Arrêt de Debugger Comme Mac OS X a une mémoire protégée, vous navez pas besoin de vous inquiéter sur les conséquences de quitter lapplication directement depuis Debugger. En appuyant juste sur le bouton Stop, situé en haut à gauche du panneau Debug, Project Builder force lapplication à quitter. Voilà, vous avez fini ! À plus, pour de prochaines aventures ! comme dirait Daniel. :-)))) | |