GHCi debugger status
marlowsd at gmail.com
Mon Nov 24 07:00:35 EST 2008
Claus Reinke wrote:
> >> It is supposed to show only free variables in the selected expression.
>>> I'm sure I had cases when I was able to access variables which were
>>> not free in the selected expression but which would have been in
>>> scope if used in the selected expression. The values available seemed
>>> correct (contrary to your case). I thought it was a step to get all
>>> the variables in scope to be visible but later I learned it is not
>>> feasible and my lucky experience was probably a bug. If I encounter
>>> it again should I fill a bug report? I mean: is it really a bug?
> Perhaps someone could help me to understand how the debugger is supposed
> to be used, as I tend to have this problem, too:
> - when I'm at a break point, I'd really like to see the current scope
> or, if that is too expensive, the next enclosing scope, in full
> (not only would that tell me what instantiation of my code I'm in,
> it would also seem necessary if I want to reconstruct what the
> current expression is)
I don't understand what you mean here - surely in order to "reconstruct
what the current expression is" you only need to know the values of the
free variables of that expression? Also I don't understand what you mean
by the "next enclosing scope". Could you give an example?
> - with only the current expression and some of its free variables
> accessible, I seem to be unable to use the debugger effectively
> (it would be less of a problem if the current expression could
> be displayed in partially reduced source form, instead of partially
> defined value form)
I don't know what "partially defined value form" is. The debugger shows
the source code as... source code!
I think I know what you mean though. You want the debugger to substitute
the values of free variables in the source code, do some reductions, and
show you the result. Unfortunately this is quite hard to implement in GHCi
(but I agree it might be useful), because GHCi is not a source-level
> Currently, I only use the debugger rarely, and almost always have to
> switch to trace/etc to pin down what it is hinting at. What is the
> intended usage pattern that makes the debugger more effective/
> convenient than trace/etc, and usable without resorting to the latter?
Set a breakpoint on an expression that has the variable you're interested
in free, and display its value. If your variable isn't free in the
expression you want to set a breakpoint on, then you can add a dummy
reference to it.
More information about the Glasgow-haskell-users