Utiliser la (d)debug.lib avec GCC

Un article de GuruMed.

Par Sara

Sommaire

A QUOI CA SERT ?

Il existe des cas ou il n'est pas possible d'utiliser les fonctions d'entrée/sortie classiques telle printf() :

  • dispatcher boopsi,
  • Task (en opposition avec les Process),
  • ...

Une bibliothèque permet grâce a des fonctions dédiées d'envoyer des données vers le port série ou de recevoir des données depuis le port série : la debug.lib. Ceci dans l'optique de communiquer par exemple avec un terminal déporté, ou alors d'intercepter en local ces informations et de les afficher dans une console grâce à des outils spécifiques (voir le paragraphe 4).

NB : Les Process sont des "task" améliorées pour gérer notamment l'environnement DOS (entrées/sorties). Voir la structure Process de l'include dos/dosextens.h).


COMMENT ON S'EN SERT ?

En fait il existe deux bibliothèques :

  • la debug.lib utilise le port série (voir le paragraphe 4 pour intercepter les sorties série),
  • la ddebug.lib utilise le port parallèle (utile lorsque l'on débogue une application utilisant le port série ;).

La plus célèbre fonction en est "KPrintF()", l'équivalent d'un "printf()".

Le prototype se trouve dans le fichier d'include "clib/(d)debug_protos.h" qui doit être ajouté au fichier C utilisant une des fonctions de la bibliothèque.

Ajouter la bibliothèque qui va bien lors de l'édition des liens ("gcc ... -ldebug ...").


OU EST-CE QU'ON TROUVE LA debug.lib ?

Dans le CéDé développeur bien sûr ;)

ADCD_2.1:NDK/NDK_3.5/Include/linker_libs/debug.lib

ADCD_2.1:NDK/NDK_3.1/Includes&Libs/linker_libs/debug.lib


Le problème est que si ces bibliothèques s'utilisent telles quelles avec SAS/C, StormC, et VBCC, cela n'est pas possible pour GCC car le format des bibliothèques est différent...

Pour pouvoir utiliser cette bibliothèque avec GCC, il faut réaliser les pirouettes suivantes :

  1. Récupérer l'archive hunk2aout.lha à l'une de ces adresses :
  2. invoquer les commandes suivantes pour transformer la debug.lib du CéDé developpeur en bibliothèque GCC libdebug.a :
    • hunk2aout debug.lib
    • ar qc libdebug.a obj.#?
    • ranlib libdebug.a
  3. jeter libdebug.a dans GG:lib/,
  4. drriiing, c'est prêt :)


QUELS SONT LES OUTILS PERMETTANT D'INTERCEPTER LES SORTIES SERIE ?

Les outils les plus connus permettant d'intercepter les sorties de débogage sur port série sont "Sashimi" et "Sushi" (il faudra que l'on m'explique le rapport entre ce genre d'outil et le Japon). Pour ma part, j'utilise "Sashimi" que l'on peut trouver dans le CéDé développeur ou sur aminet :

"ADCD_2.1:Contributions/Olaf_Barthel/Tools/Debugging/Sashimi"

"aminet/dev/debug/Sashimi.lha"

"aminet/dev/debug/Sushi.lha"


Je n'ai utilisé "Sashimi" que de manière simple : "sashimi CONSOLE BUFK=64 NOPROMPT ASKEXIT ASKSAVE".


Y A-T-IL DES CONSEILS PARTICULIERS ?

  • Attention à bien respecter les formats de conversion des commandes "KPrintF()" et autres (type "printf()") : %d, %ld, ... Caster si besoin est.
  • Afficher des messages via la debug.lib ralentit notoirement votre application, tenez en compte.


Si vous détectez des erreurs ou voulez faire des remarques, n'hésitez pas à me contacter.

A bientôt.

Stéphane SARAGAGLIA, saragagliaMAJUSCULESAVIRER@ifrance.com

20 Mai 2001

06 Février 2002 : corrections

18 Octobre 2002 : l'adresse mel n'était pas bonne...

22 Décembre 2003 : changé "ranlib libdebug.a1" en "ranlib libdebug.a"

28 Mars 2004 : corrigé mon mel contre le spam... :(