Obligement - L'Amiga au maximum

Vendredi 19 avril 2019 - 01:16  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


En pratique : Déboguer avec MonAm
(Article écrit par Denis Jarril et extrait d'Amiga News Tech - octobre 1991)


Après une longue discussion téléphonique avec l'un de nos innombrables abonnés, je me suis rendu compte que peu de gens savaient utiliser efficacement ce superbe et dispensable outil qu'est MonAm.

Pourtant, ledit abonné était un utilisateur "officiel" du Devpac, c'est-à-dire qu'il l'avait acheté tout à fait légalement, et était même allé jusqu'à renvoyer sa carte de garantie à HiSoft (ce que, malheureusement pour eux, peu de Français font). C'est à ces gens-là uniquement que cet article s'adresse ; il ne servira absolument pas de mode d'emploi aux utilisateurs "officieux", qui se seraient procuré le Devpac par des voies détournées...

Pourquoi un débogueur ?

C'est bien connu, les programmes écrits en langage machine sont plus particulièrement sujets à des erreurs. Cela peut aller de la plus bénine (la simple erreur d'affichage, très simple à corriger, qui entraîne une illisibilité totale du texte), jusqu'à la sérieuse (résultat d'un calcul erroné) et à la carrément catastrophique (plantage de l'Amiga). Un débogueur vous aide à trouver ces erreurs et à les corriger. Il se présente généralement sous la forme d'un désassembleur qui vous permet d'exécuter votre programme pas à pas, instruction par instruction. Vous pouvez ainsi facilement repérer les endroits de votre programme qui ne réagissent pas comme vous l'auriez souhaité.

MonAm est un débogueur symbolique, c'est-à-dire qu'il désassemble le code machine en utilisant tous les labels définis dans votre programme source, exactement comme si vous vous trouviez encore dans l'éditeur GenAm. Cette présentation est évidemment d'une aide très précieuse et simplifie grandement la recherche des bogues. La seule condition à ceci est que le programme exécutable contienne un (ou plusieurs) HUNK_SYMBOL, ce que GenIm, l'assembleur du Devpac, sait parfaitement faire (assembler avec l'option "Debug Info" sur "Normal" ou "Exports"). Notez enfin que bien que MonAm soit un débogueur de bas niveau (c'est-à-dire ne présentant que les codes machine du programme et les registres du micro-processeur), on peut également s'en servir pour déboguer des programmes écrits en un autre langage, comme le C ou le Pascal.

Les exceptions

MonAm sait parfaitement reconnaître quand une exception. au sens 68000 du terme, survient. Ces exceptions provoquent normalement une requête Software Error - Task held ou un Guru Meditation. MonAm détourne les exceptions sur une routine à lui et vous permet de poursuivre l'exécution du programme fautif comme si de rien n'était. Cela n'est bien entendu valable que pour le programme en cours de débogage ; si une autre tâche venait à provoquer une exception, le Guru apparaîtrait de toute manière.

Pour tracer un programme instruction par instruction, MonAm utilise ce que l'on appelle des points d'arrêt. Pour placer un tel point d'arrêt dans un programme. MonAm y insère le code machine $4AFC, correspondant à l'instruction 68000 ILLEGAL. Son convertisseur d'exception intégré est alors capable de déterminer si cette instruction définissait un point d'arrêt, ou si elle était le fruit d'une erreur dans le programme. Dans les deux cas, MonAm suspend l'exécution du programme, mais la suite des évènements dépend bien sûr de la raison de la présence de l'instruction ILLEGAL ici. Nous reviendrons plus en détails sur les points d'arrêts un peu plus loin.

L'écran de MonAm

L'illustration ci-dessous représente l'écran de MonAm, avec toutes les fenêtres qu'il est possible d'y ouvrir (cinq en tout).
  • La première présente les registres du 68000 (leur contenu et quelques octets de la mémoire qu'ils pointent).
  • La seconde est la fenêtre de désassemblage principale.
  • La troisième présente une copie (dump) hexadécimale et ASCII de la mémoire.
  • La quatrième fenêtre peut être utilisée soit pour désassembler une autre portion du programme que celle affichée dans la fenêtre 1 soit pour visionner un texte source, comme ici.
  • Enfin, la cinquième fenêtre présente une seconde copie de la mémoire, très pratique pour comparer une zone avec celle affichée dans la fenêtre 3.
MonAm

En mode trace, MonAm rafraîchit le contenu de toutes ses fenêtres après chaque instruction exécutée. Cela vous permet de suivre en temps réel la modification d'un tableau en mémoire, par exemple. De plus, et à l'exception de la première, toutes les fenêtres de MonAm peuvent être liées à un registre particulier. Ainsi, après chaque instruction, l'adresse de la mémoire représentée par cette fenêtre est recalculée. Par défaut, la fenêtre 2 est liée au PC.

Les expressions numériques

MonAm dispose d'un véritable interpréteur pour évaluer les expressions que vous lui fournissez soit directement, soit en tant que paramètre d'une commande. Cet interpréteur prend même en compte la priorité des opérateurs arithmétiques !

MonAm considère que tous les nombres entrés sont en hexadécimal. Pour entrer un nombre en décimal, il faut le précéder du signe "\". Quand un nombre hexadécimal pourrait être confondu avec un nom de registre, il faut le faire précéder du signe "$" ou d'un "0". Vous pouvez également utiliser les registres du 68000 dans une expression. Quant aux accolades "{" et "}", elle représentent le contenu de l'adresse pointée par l'expression qu'elles entourent. Ainsi, des expressions comme :

MonAm

...sont parfaitement valides.

Il existe également plusieurs symboles réservés :
  • CODE : adresse du premier hunk du programme.
  • HUNKx : adresse du xème hunk du programme.
  • SP : pointeur de pile courant (USP ou SSP).
  • SSP : pointeur de pile superviseur.
  • SR : registre d'état du processeur.
Enfin, 10 variables, numérotées de M0 à M9 peuvent prendre les valeurs de votre choix. Par défaut, les variables M2 à M5 contiennent l'adresse de début des fenêtres correspondantes. M0 et M1 sont positionnés, lorsque l'on charge un fichier binaire (pas un programme !) en mémoire, respectivement sur l'adresse de début et l'adresse de fin du fichier.

Les points d'arrêt

Les points d'arrêt de MonAm sont conditionnels, c'est-à-dire que l'on peut préciser certaines conditions que MonAm évaluera avant de décider s'il doit interrompre ou non l'exécution du programme en cours.

La première forme de point d'arrêt est la plus simple : le programme s'interrompra une fois ce point d'arrêt atteint, et le point d'arrêt sera effacé. L'utilisation la plus évidente est de permettre l'exécution du programme jusqu'à ce qu'une routine particulière soit atteinte.

La seconde forme de point d'arrêt est permanente ; chaque fois que le programme passera sur ce point d'arrêt, il sera interrompu.

La troisième forme de point d'arrêt introduit la notion de compteur ; le programme ne s'arrêtera qu'après être passé un certain nombre de fois (défini par vous) sur ce point d'arrêt, ce qui est très utile dans les boucles.

Enfin, la forme la plus puissante est le point d'arrêt conditionnel, c'est-à-dire que le programme ne sera interrompu que si la condition spécifiée est remplie. Cette condition peut aussi bien être un registre qui prend une valeur particulière, qu'une zone de mémoire qui soit modifiée, soit encore que le bit Z de SR soit positionné. Toutes les expressions vues plus haut sont valides.

La commande "Amiga droite+B", qui permet de placer un point d'arrêt à une adresse donnée, accepte plusieurs formes de paramètres :

MonAm

Dans la table ci-dessus, "<adr>" représente une adresse quelconque (par exemple, un label du programme), et "<exp>" une expression valide. MonAm ne peut pas placer de points d'arrêt à des adresses impaires ni en ROM.

Voilà pour l'essentiel de MonAm. Nous continuerons le mois prochain notre survol de ses principales fonctionnalités.


[Retour en haut] / [Retour aux articles]