Claus Reinke wrote:
fun x y =
let f1 = ... (f2 x) ... -- f1 calls f2
f2 x = x * 2
in case x of
1 -> f2 0
_ -> f2 (f1 y)
g x = let z = (some complex computation) in z `div` x
main = print (g (fun 1 2))
This is a classical example of why laziness gets in the way of
debugging. Now, when (f2 0) gets finally evaluated and throws a
divByZero error, x and y are nowhere to be found.
Since we do not have a real dynamic stack, it is difficult to say
where their values should be stored. The only place I can think of is
at the breakpoint itself, but then as Simon said this poses a serious
efficiency problem.
Isn't that a case of premature optimization? I will happily compain
about performance issues later, after the debugger turns out to be
merely too slow!-)
No, it's a real problem. If we retained all the variables in scope at
every breakpoint, GHCi would grow a whole bunch of space leaks. It's
pretty important that adding debugging shouldn't change the space behaviour
of the program. Of course, constant factors are fine, but we're talking
asymptotic changes here.
Now perhaps it would be possible to arrange that the extra variables are
only retained if they are needed by a future breakpoint, but that's tricky
(conditional stubbing of variables), and :trace effectively enables all
breakpoints so you get the space leaks back.
A similar argument applies to keeping the dynamic stack. The problem with
the dynamic stack is that it doesn't look much like you expect, due to
tail-calls. However, I think it would be good to let the user browse the
dynamic stack (somehow, I haven't thought through how hard this would be).
But what I'd really like is to give the user access to the *lexical*
stack, by re-using the functionality that we already have for tracking the
lexical stack in the profiler. See
http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack
> (btw, is there a debugger home page
on the wiki, where issues/FAQs like "why can't I have scope contexts"
are documented?)
No, please by all means start one.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users