Jc/md/lp-01/06Debug1 Debugging Élémentaire. jc/md/lp-01/06Debug2 Objectif du chapitre Premier contact avec les outils de mise au point Génération en vue.

Slides:



Advertisements
Présentations similaires
Été INF1025 Driouch Elmahdi
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Génération de plate-forme
Les procédures et interruptions en Assembleur (Tasm)
Le Clavier.
PROGRAMMATION LOGICIEL PL7 MICRO Consignes
Vocabulaire pour la passage du modèle conceptuel des données au modèle relationnel des données. MCDMRD EntitéTable PropriétésChamps, attribut IdentifiantClé
La pile un élément essentiel
C.
PROCEDURE TYPE DE DEFINITION DES MODALITES
! ! ! PROCEDURE TYPE POUR ORGANISER L ’ANONYMAT
! 1 CREATION D'UNE MAQUETTE EXPORT / IMPORT
Utilisation des boutons Suivant MODULE 2 PRINCIPES GENERAUX DUTILISATION DAPOGEE.
FORMATION OUTILS « FONCTIONS »
. Si vous êtes revenu au gestionnaire de programmes et que vous êtes apparemment déconnecté : Solution : taper simultanément + pour remettre Apogée à l'écran.
Comprendre l’ergonomie du module STSWEB
Lexique des manœuvres de base pour utiliser à PowerPoint
Jc/md/lp-01/06Génération de plate-forme1 Émulateur.
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Internet Appliance1. jc/md/lp-01/05Internet Appliance2 Objectif du chapitre Réalisation dune plate-forme permettant laccès à Internet Paramétrages.
La fonction Style Permet de créer des types de texte, par exemple
Les TABLEAUX Retour au menu principal.
Assistance à distance Parfois on se sent bien seul face à un problème informatique surtout si on n’est qu’un simple utilisateur. Lorsqu'un problème survient.
12 novembre 2012 Grégory Petit
MENU DE L’AIDE Cliquer ici pour aide RESEAUX DE CONTACTS
Systèmes d’exploitation
Commission scolaire des Laurentides
Firebug Dévermineur Debugger.
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Les dossiers débiteurs
Windows 7 Administration des comptes utilisateurs
Création d’un programme :
Création d'un diaporama Création d'un diaporama
LOGICIEL PL7 MICRO PROGRAMMATION MISE AU POINT Consignes?
Publispostage Menu Outils / Lettres et publipostage
Micro contrôleurs Microchip Outil de developpement MPLAB
FICHIERS : Définition : Algorithme général:
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique et de génie logiciel Développer.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
INSCRIPTION AUX ELEMENTS
CONSULTATION D'UN DIPLÔME
AFFECTATION D'UN ETUDIANT EDITION DES CONVENTIONS
PROCEDURE TYPE D'ORGANISATION DES EPREUVES PROCEDURE TYPE D'ORGANISATION DES EPREUVES Saisir les évolutions éventuelles de caractéristiques de salles :
Les devis Le devis ODF.
Les devis Les devis texte.
Plan cours La notion de pointeur et d’adresse mémoire.
Création et présentation d’un tableau avec Word 2007
Pourquoi est-il nécessaire d'installer de nouveaux logiciels sur votre ordinateur ? J'exclus de cette présentation l'installation de nouveaux matériels.
Le glossaire Outil qui permet d’enregistrer des mots, des portions de phrases ou des phrases que l’on tape régulièrement et que l’on pourra récupérer afin.
Lancement de Microsoft Word
PROCEDURE TYPE PROCEDURE TYPE DE
Programmation Système et Réseau
Introduction à l’informatique en gestion 1 Plan de la leçon Modalités d’affichage La navigation Ouvrir/Enregistrer La saisie La sélection La.
Traitement de texte +.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
POWERPOINT.
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Modules Chapitre 1 : Système d’exploitation
Comprendre le SGBDR Microsoft Access – partie 2
Lancement de Microsoft Word 1. Cliquer avec le bouton droit de la souris sur le raccourci de « Microsoft Office Word 2003 » sur le bureau, 2. Dans le menu.
Conception des pages Web avec
LOGICIEL PL7 MICRO PROGRAMMATION MISE AU POINT Consignes?
Chapitre 9 Les caractères.
Microsoft Official Academic Course, Microsoft Excel 2013
Formation.
Abes agence bibliographique de l’enseignement supérieur Les scripts.
Transcription de la présentation:

jc/md/lp-01/06Debug1 Debugging Élémentaire

jc/md/lp-01/06Debug2 Objectif du chapitre Premier contact avec les outils de mise au point Génération en vue de debug Usage des points darrêt, pas à pas Visualisations diverses –Code –Variables –Mémoire –Pile –…

jc/md/lp-01/06Debug3 Objectifs (1) La mise au point de programmes (debugging) nécessite lemploi de techniques particulières Platform Builder offre –Un ensemble doutils usuels Exécution du programme en pas à pas Pose ou suppression de points darrê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

jc/md/lp-01/06Debug4 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 dexploitation Étude du debugger en deux phases –Visualisations diverses, Breakpoint, etc. –Kernel Tracker ultérieurement

jc/md/lp-01/06Debug5 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 loutil de debug –Messages –Visualisation du code source –Breakpoint –Visualisation des variables, de la mémoire –Visualisation du code assembleur –Visualisation de la pile

jc/md/lp-01/06Debug6 Génération de la plate-forme « Debug » Utiliser lassistant, comme précédemment, avec éventuellement un nouveau nom Au pas 6 de lassistant, modifier les options Cocher dans les options de la liste « Debug » : « Enable Image Larger than 32 MB » Sortir de lassistant par « Finish » Sélectionner la configuration active « Debug » Générer la plate-forme (Build Platform)

jc/md/lp-01/06Debug7 Modification des options

jc/md/lp-01/06Debug8 Sélection de la taille des images

jc/md/lp-01/06Debug9 Sélection configuration : Debug

jc/md/lp-01/06Debug10 Génération de la plate-forme

jc/md/lp-01/06Debug11 Génération de limage

jc/md/lp-01/06Debug12 Exécution dune application Sans inclusion dans limage Création du.exe Téléchargement du noyau Éxécution par la commande « Run Program » Avec inclusion dans limage Création du.exe Refaire une image avec choix de loption dinsertion Téléchargement du noyau avec lapplication Exécution à partir de la cible par la méthode Windows

jc/md/lp-01/06Debug13 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 lapplication : BRKP Nous ajouterons le code par la suite

jc/md/lp-01/06Debug14 Choix de loption pour le projet

jc/md/lp-01/06Debug15 Inclusion application dans limage

jc/md/lp-01/06Debug16 Exclusion application de limage

jc/md/lp-01/06Debug17 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 darguments Introduire des messages de contrôle

jc/md/lp-01/06Debug18 Messages daide à la mise au point Édition habituelle de messages de contrôle dans lapplication 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

jc/md/lp-01/06Debug19 Macro RETAILMSG RETAILMSG(cond, printf_exp) Impression si la condition est vraie de ce quon 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);

jc/md/lp-01/06Debug20 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)

jc/md/lp-01/06Debug21 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;

jc/md/lp-01/06Debug22 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; }

jc/md/lp-01/06Debug23 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; }

jc/md/lp-01/06Debug24 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; }

jc/md/lp-01/06Debug25 Option de génération en mode debug

jc/md/lp-01/06Debug26 Configure Remote Connection

jc/md/lp-01/06Debug27 Configure Emulator Download Service

jc/md/lp-01/06Debug28 Insertion et suppression de breakpoints Les breakpoints peuvent être placés ou enlevés avant ou après le lancement de lapplication 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é

jc/md/lp-01/06Debug29 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 Dautres 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 licône Windows

jc/md/lp-01/06Debug30 Exemple : fenêtre des variables

jc/md/lp-01/06Debug31 Écran avec la fenêtre des variables Fenêtre nouvelle disponible pour des commandes lignes (shell) Variables Fenêtre principale

jc/md/lp-01/06Debug32 Groupe de fenêtres flottantes

jc/md/lp-01/06Debug33 Exemple de fenêtres ancrées Registres du CPU Fenêtre principale Contexte Watch Fenêtre nouvelle disponible pour des commandes lignes (shell) Fenêtre de sortie

jc/md/lp-01/06Debug34 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 dicônes correspond à des commutateurs pour louverture ou la fermeture des fenêtres de debug Une autre série correspond à lexécution du code : Go simple (jusquà un point darrêt), pas à pas, avec saut dune fonction, etc. Les bulles daide sont explicites

jc/md/lp-01/06Debug35 Essai de BRKP Génération de la plate-forme Génération de lapplication Génération de limage Téléchargement du noyau avec ou sans lapplication suivant les choix Exécution du programme Fermeture de la cible Déconnexion

jc/md/lp-01/06Debug36 Après téléchargement de la cible

jc/md/lp-01/06Debug37 Cible vierge

jc/md/lp-01/06Debug38 Exécution par la commande shell Commande du shell s BRKP s pour start

jc/md/lp-01/06Debug39 Fenêtres du debugger après exécution Messages

jc/md/lp-01/06Debug40 Cible après exécution Attente du caractère Entrée Taper Entrée pour finir BRKP

jc/md/lp-01/06Debug41 Pose dun 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 darrêt, marqué par un rond rouge en marge (en fait cest un commutateur qui insère ou supprime un point darrêt) Relancer le programme sil ne lest pas Au début, on doit observer une flèche jaune superposée au premier point darrêt

jc/md/lp-01/06Debug42 Arrêt du debugger Icône darrêt

jc/md/lp-01/06Debug43 Après pose des points darrêt

jc/md/lp-01/06Debug44 Arrêt sur point darrêt

jc/md/lp-01/06Debug45 Exécution du programme en debug Chaque commande Go (menu ou icône) provoque lexécution du programme jusquà : –Rencontre dun point darrêt –Rencontre dune erreur dexé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 davance

jc/md/lp-01/06Debug46 Avance dun pas Avance par –Le menu « Debug » –Les touches de fonction du clavier –Les icônes (dessins et bulles explicites) Plusieurs types davance –Un pas dans la fonction (Step Into) –Un pas en sautant la fonction (Step Over) –Un pas en ressortant de la fonction (Step Out) –Jusquau curseur (Run to Cursor)

jc/md/lp-01/06Debug47 Avance dun pas simple Avance un pas

jc/md/lp-01/06Debug48 Après avance dun pas simple Fenêtre des variables i à jour, j ? Messages

jc/md/lp-01/06Debug49 Avance dun pas avec saut Avance avec saut de la fonction pour ne pas exécuter toute la fonction en pas à pas Avance avec saut j à jour

jc/md/lp-01/06Debug50 Avance avec sortie de la fonction Ce type de pas (Step Out) permet de cesser lexamen dune fonction en pas à pas en retournant directement chez lappelant Utile quand on est entré par inadvertance dans une fonction déjà au point quon 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

jc/md/lp-01/06Debug51 Avance avec sortie Le pas simple va nous faire entrer dans la fonction printf pour laquelle nous navons pas le code source Un pas simple

jc/md/lp-01/06Debug52 Recherche du code source Puisque le code source nest pas sur la machine…

jc/md/lp-01/06Debug53 Fenêtre en mode désassemblage Le pas à pas va nous conduire dans une nouvelle fonction après une demande de localisation du code source puisque ici la fonction est aussi inconnue.

jc/md/lp-01/06Debug54 Entrée dans la fonction imbriquée On va sortir de cette fonction et retrouver la demande de localisation pour le printf

jc/md/lp-01/06Debug55 Recherche du code source Puisque le code source nest toujours pas sur la machine…

jc/md/lp-01/06Debug56 Sortie de la fonction Le contexte est redevenu printf

jc/md/lp-01/06Debug57 Suppression du désassemblage

jc/md/lp-01/06Debug58 Quelques pas jusquà la fonction

jc/md/lp-01/06Debug59 Entrée dans la fonction produit Le contexte est notre fonction dwProduit. Pourquoi 5 ? On continue en assembleur.

jc/md/lp-01/06Debug60 Code assembleur de dwProduit Malgré la position de la flèche jaune sur le code source, linitialisation du for nest pas commencée.

jc/md/lp-01/06Debug61 Debug en assembleur Après un pas, dwC est bien initialisée, on repasse en mode normal

jc/md/lp-01/06Debug62 Après quelques pas, dans dwSomme Le contexte est maintenant celui de la fonction dwSomme. On peut aussi voir les autres contextes.

jc/md/lp-01/06Debug63 Cible à ce stade

jc/md/lp-01/06Debug64 Visualisation des appels de fonctions Louverture de la fenêtre « Call Stack » visualise la pile des appels de fonctions.

jc/md/lp-01/06Debug65 Fin de lexécution Terminer le programme avec les commandes de déroulement « Go » ou davance par pas Quand on arrive sur le getchar() taper le caractère « Entrée » dans la cible. Mais à la suite de frappes au cours des manipulations, il se peut quun caractère soit déjà présent dans le tampon dentrée et alimente le getchar() ; dans ce cas on ne verra pas lattente du caractère ; il faut poursuivre les avances par pas.

jc/md/lp-01/06Debug66 Fin de lexécution (2) Après exécution de la dernière instruction, le système doit encore exécuter des fonctions « épilogues » pour terminer complètement le programme. Il faut donc poursuivre lavance par le debugger, normalement par des pas « Step Out » jusquà obtenir le déchargement de lapplication. On pourra alors reprendre correctement une nouvelle session de debug pour examiner dautres possibilités.

jc/md/lp-01/06Debug67 Cible à la fin de lexécution

jc/md/lp-01/06Debug68 Fin complète de lapplication Messages indiquant le déchargement de lapplication, du module console utilisé indirectement par notre code et des symboles associés. La fenêtre cible est revenue à son état initial. Plus rien à exécuter Commandes inactives

jc/md/lp-01/06Debug69 Nouvelle session Nouvelle commande start Commuter en debug source

jc/md/lp-01/06Debug70 Fenêtre « Variables » Barre « Toolbar » affichée avec le menu contextuel –Nom de la fonction –Arguments & symbolise une adresse, comme en C Clicker un + présent devant un nom offre des informations liées, adresse, valeur dune variable, champs dune structure, etc. Trois onglets –« Auto » pour les variables au fil de leur utilisation –« Locals » pour les variables locales –« This » qui correspond au pointeur « this »du C++

jc/md/lp-01/06Debug71 Fenêtre « Variables » (2) Affichage en hexadécimal ou en décimal Modification des valeurs des variables en sélectionnant la partie valeur à modifier et en saisissant la nouvelle valeur Modification visualisée par un affichage rouge répercutée dans les autres fenêtres Variables gérées automatiquement –Introduction de variable impossible –Suppression de variable impossible

jc/md/lp-01/06Debug72 Onglet « Auto » initial lpCmdLine est un pointeur sur la ligne de commande ; sa valeur est indiquée ainsi que la chaîne pointée, ici vide Premier caractère de la chaîne UNICODE, donc ici fin de chaîne

jc/md/lp-01/06Debug73 Onglet « Auto » après avance Variables gérées automatiquement Modification possible après sélection de ce champ

jc/md/lp-01/06Debug74 Onglet « Locals » Quand une variable est modifiée par une instruction, elle apparaît en rouge

jc/md/lp-01/06Debug75 Onglet « Locals » (2) Pas de confusion entre les variables de même nom Fenêtre du contexte de la fonction produit superposée par copier coller Fenêtre du contexte de la fonction somme après de nombreux pas

jc/md/lp-01/06Debug76 Fenêtres « Watch » Fenêtres dans lesquelles on choisit les variables Introduction de la variable par son nom Suppression par sélection et « Delete » Valeur modifiable et reportée dans les autres fenêtres Modifications visualisées en rouge Possibilité dintroduire une expression du style langage C directement ou par le truchement dune autre fenêtre : « QuickWatch » Gestion des variables suivant durée de vie et portée Quatre onglets équivalents

jc/md/lp-01/06Debug77 Exemple « Watch1 » (1) Un click droit ouvre un menu contextuel dont une entrée indique le type de la variable.

jc/md/lp-01/06Debug78 Exemple « Watch1 » (2) Capture juste après la deuxième sortie de la fonction dwSomme Au pas suivant dwC prendra la valeur 10

jc/md/lp-01/06Debug79 Exemple « Watch1 » (3)

jc/md/lp-01/06Debug80 Exemple « QuickWatch »

jc/md/lp-01/06Debug81 Visualisation de la mémoire Deux fenêtres équivalentes « Memory 1 » et « Memory 2 » Affichage à partir de ladresse fournie –numériquement en hexadécimal ou en décimal –par le nom dune variable, dune fonction Choix de laffichage par le menu contextuel en octet, demi-mot, mot Modification directe de la mémoire, avec mise à jour dans les autres fenêtres et réciproquement

jc/md/lp-01/06Debug82 Exemple de visualisation mémoire Adresse de i Valeur de i Adresse de dwSomme Début du code de dwSomme

jc/md/lp-01/06Debug83 Représentation « Little Endian » Adresse de i Valeur de i en 32 bits Modification arbitraire de i i : poids faibles dans ladresse la plus basse i : poids forts dans ladresse la plus haute

jc/md/lp-01/06Debug84 Fenêtre « Registers » Visualisation des registres du processeur Menu contextuel pour des options –Registres flottants –Registres multimédia Modification possible en écrivant directement dans le registre Utilisables par leur nom symbolique pour fournir –Une adresse pour un pointeur –Une valeur pour un registre de données

jc/md/lp-01/06Debug85 Visualisation des registres Nom symbolique EAX Nom symbolique EIP

jc/md/lp-01/06Debug86 « Debug » en mode assembleur Visualiser le code assembleur par le menu « View », licône, le menu contextuel ou encore la touche de fonction Toutes les commandes rencontrées dans la mise au point en langage source sappliquent, en particulier les commandes davance par pas Les fenêtres de visualisation des registres et de la pile sont particulièrement utiles

jc/md/lp-01/06Debug87 Exemple : arrêt sur le breakpoint Avancer par pas À suivre Activer le « Breakpoint »

jc/md/lp-01/06Debug88 Après de nombreux pas Dans dwProduit avant le second appel de dwSomme

jc/md/lp-01/06Debug89 Registres X86 ESP:Stack Pointer Register –Pointeur de pile EBP:Stack-FrameBase Pointer –Pour accéder a des données passées par la pile EIP: Instruction Pointer

jc/md/lp-01/06Debug90 Exemple : dwValeur=dwSomme(i,j)

jc/md/lp-01/06Debug91 Visualisation de la pile (1) Pile après appel de dwSomme Pile avant appel de dwSomme

jc/md/lp-01/06Debug92 Visualisation de la pile (2) Pile après sauvegarde de EBP puis ECX

jc/md/lp-01/06Debug93 Visualisation de la pile (3) On peut assez facilement suivre lévolution de la pile. Ici, à partir de ladresse donnée par le pointeur de pile : –ECX (A), EBP (1202FC00) sauvegardés par dwSomme –La partie segment de ladresse de retour placée par linstruction call dans dwProduit : call dwSomme –Les arguments dwA (5) et dwC (A) placés par dwProduit pour dwSomme –La variable locale dwC de la fonction dwProduit –Puis, même chose pour lappel de dwProduit par main

jc/md/lp-01/06Debug94 Complément Ce ne sont que les principales fonctionnalités du debugger de base ; il reste beaucoup de possibilités à explorer. Nous explorerons ultérieurement toute une autre série de fonctionnalités dans le « Kernel Tracker » Un dernier groupe de commandes dont certaines sont très évoluées, est fourni par des commandes lignes à saisir dans la fenêtre « Shell » Windows CE accessible par licône CE

jc/md/lp-01/06Debug95 Conclusion Ce chapitre a permis de prendre en main les techniques les plus classiques de mise au point