One useful way to debug code suspected of being in error is to insert an explicit error message, such as error "debug me", and start stepping from there, as in the following demonstration.
i1 : load "Macaulay2Doc/demo2.m2"
|
i2 : code f
o2 = /usr/local/share/Macaulay2/Macaulay2Doc/
demo2.m2:6:4-12:6: --source code:
f = t -> (
x := 1;
error "debug me";
y := t+1;
z := 1/t;
w := x+t;
)
|
i3 : f 0
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:8:10:(3):[1]: error: debug me
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:8:10:(3):[1]: --entering debugger (type help to see debugger commands)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:
8:5-8:21: --source code:
error "debug me";
|
ii4 : return
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:11:(3):[1]: --stepping limit reached
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:11:(3):[1]: --entering debugger (type help to see debugger commands)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:
9:5-9:13: --source code:
y := t+1;
|
ii5 : current
oo5 = local-assign 2 0 2-OP + local-fetch 0 0
1
oo5 : PseudocodeClosure
|
ii6 : disassemble oo
oo6 = (local-assign 2 0 (2-OP + (local-fetch 0 0) 1))
|
ii7 : step(-3)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:11:(3):[1]: --evaluating: (local-assign 2 0 (2-OP + (local-fetch 0 0) 1))
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:11:(3):[1]: --evaluating: (2-OP + (local-fetch 0 0) 1)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:10:(3):[1]: --evaluating: (local-fetch 0 0)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:12:(3):[1]: --stepping limit reached
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:9:12:(3):[1]: --entering debugger (type help to see debugger commands)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:
9:12-9:13: --source code:
y := t+1;
|
ii8 : step
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:10:11:(3):[1]: --stepping limit reached
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:10:11:(3):[1]: --entering debugger (type help to see debugger commands)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:
10:5-10:13: --source code:
z := 1/t;
|
ii9 : step
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:10:11:(3):[1]: error: division by zero
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:10:11:(3):[1]: --entering debugger (type help to see debugger commands)
/usr/local/share/Macaulay2/Macaulay2Doc/demo2.m2:
10:10-10:13: --source code:
z := 1/t;
|
ii10 : t
oo10 = 0
|