how dynamic stack approximation works

Peter Hercek phercek at gmail.com
Sun Mar 1 08:00:08 EST 2009


Malcolm Wallace wrote:
> In a lazy language, the dynamic stack rarely tells you anything of
> interest for debugging.  For the value at the top of the stack, you get
> one of many possible _demand_ chains, rather than the creation chain.
> The demanding location is pretty-much guaranteed not to be the site of
> the bug.
> 
> But you can think of the lexical call stack as what _would_ have been
> the dynamic call stack, if only the language were completely strict
> rather than lazy.  Most people find the latter notion more intuitive for
> the purposes of finding program errors.

OK, maybe I understand it. If the lexical stack would give me access to 
local variables for all its frames it would be probably better. In the 
current situation where I have only access to the free vars in the 
current expression it is not that useful. I mean for my code I know what 
is the creation chain. This may be different if I would debug somebody 
else's code. But when debugging my code I sometimes lose track what 
demand chain I'm in or why the hell I'm at the given location at all. 
Dynamic stack would help here a lot and it would help me to better 
understand lazy behavior of my code. The creation behavior is rather 
clear to me because it is explicit in the code. The lazy behavior may be 
more tough because it is implicit.


>> Sure, but the plan to maintain an approximate debugging dynamic stack 
>> depends on one thing:
> 
> There is no need to approximate the dynamic stack.  It is directly
> available to the RTS, in full detail.

Well, but this would be the exact stack. It would be great to see how 
ghci works but I'm not sure how much helpful it would be for debugging. 
I'm afraid it would have the same problem as _return binding (bug 
#1531). In my code _return is mostly wrong. I'm not even checking it out 
any more.


Thanks,
   Peter.



More information about the Glasgow-haskell-users mailing list