11. Compilation, signaux et débogage
11.1 Source, objet et exécutable
Un fichier .c doit être traduit :
cc -c hello.cproduit le fichier objethello.o;- l'édition de liens combine objets et bibliothèques;
cc -o hello hello.cpeut enchaîner compilation et liaison;./helloexécute le programme du répertoire courant.
Le fichier objet contient du code compilé, mais n'est pas nécessairement un exécutable autonome. La compilation séparée devient utile lorsque plusieurs sources composent le programme.
11.2 Signaux
La commande kill envoie un signal; elle ne signifie pas nécessairement « tuer » :
SIGSTOPsuspend et ne peut pas être ignoré;SIGCONTreprend;SIGINTcorrespond généralement à la demande produite parCtrl+C;SIGTERMdemande une fin propre;SIGKILLforce la terminaison.
Un programme en boucle infinie fournit une cible observable : on trouve son PID avec ps, on l'arrête, le reprend, puis le termine depuis un autre terminal.
11.3 Récursion, pile et core dump
Une fonction récursive sans cas d'arrêt ajoute des cadres jusqu'à épuiser la pile. Une pile plus petite ou une trame plus grande réduit le nombre d'appels possibles. Les nombres mesurés dépendent de l'architecture, du compilateur, des options et de l'environnement; ils ne sont pas universels.
Le laboratoire emploie :
ulimit -apour consulter les limites;ulimit -s 1024pour réduire la pile dans le shell courant;ulimit -c unlimitedpour autoriser les vidages mémoire;- une compilation avec
-gpour conserver les informations de débogage; gdb programme corepour examiner l'état au moment de l'échec.
Cette expérience relie directement les cadres de pile théoriques à une faute observable.