Le guide de survie du programmeur Pascal en IUP 1

Mon programme est correct de toute évidence, mais ce (censuré) de compilateur refuse de toute évidence de le comprendre puisqu'il vient de faire un trap trace/BPT(coredump)... En plus ce fils de (censuré) de prof qui veut le projet pour CE SOIR. Que faire ? Le programme était le suivant:

program correct;
type
   liste   = ^cellule;
   cellule = record
		v    : integer;
		next : liste
	     end;
	      
var
   l : liste;

begin
   l := NIL;
   l^.v := 1;
   new(l^.next);
   l^.next^.v := l^.v + 1;
   writeln(l^.v)
end.
Sur les machines de la miage, on compile généralement avec pas. Si on veut davantage d'aide du compilateur, il faut commencer par utilise xlp. On recompile donc:

# xlp -g -o correct correct.pas
(-g indique au compilateur d'inclure les informations de debugging).

Ensuite, on exécute:


# ./correct
trap trace/BPT(coredump)
On lance ensuite le debugger dbx en lui indiquant le programme à debugger:

# dbx correct
Type 'help' for help.
reading symbolic information ...
[using memory image in core]

1527-103 Access to storage attempted with a NIL pointer.
 in correct at line 14
   14      l^.v := 1;
(dbx) 
Le debugger indique alors quel est le problème (Access to storage attempted with a NIL pointer) et la ligne du programme ou le problème s'est produit. On peut afficher le contenu de variables avec la commande p.

(dbx) p l
avertissement: Unable to access address 0x20000938 from core
0xffffffff 
La variable l vaut 0xffffffff, c'est à dire NIL sur le RS/6000 (notez que, contrairement à une légende bien enracinée chez les étudiants, NIL ne vaut pas 0, pour des raisons qui dépassent le cadre de IUP1.

Pour quitter: quit.


Christophe Tronche, ch@tronche.com