[plt-scheme] Suggestion: Backtrace Remembers Last, not First Tail-Recursive Procedure
On 04/07/2010 08:01 PM, Matthew Flatt wrote:
> The built-in backtrace does keep track of the most recent call, only.
> A typical reason that functions disappear in the stack trace is inlining
> by the compiler.
Oh, I hadn't considered inlining. Dang...
Could it be that `stat:fold-files' and the functions
> that call it are all inlined into `main'?
It's possible. Does PLT do inlining on procedures across different modules?
> In general, the backtrace that you get from the core system (as opposed
> to one from DrScheme in debugging more or from `errortrace') is
> approximate, and it can be affected in lots of ways by optimization.
> It's definitely in the "vague and heuristic" category.
Yeah I struggle with it a lot. End up putting a bunch of "display"
statements in my code to try to find out just how far it's getting. I
hadn't considered inlined procedures though. If I could disable
inlining, but preserve tail-call optimization, I wouldn't blow my stack
but could still more accurately debug programs.
Thanks for mentioning errortrace. I hadn't known about that before. All
I knew was Drscheme's "debug" mode. I'll probably stick with the latter
though, for the easily clickable stack traces. I bet there's a flag I
can enable in drscheme that disables that "inlining" behavior that I
thought was simply optimizing out the wrong procedure name in tail calls.