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
.