bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#36471: Unreadable Stacktrace Example


From: Ludovic Courtès
Subject: bug#36471: Unreadable Stacktrace Example
Date: Sun, 07 Jul 2019 16:38:08 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux)

Hi Björn,

I’m reassigning this bug report to ‘guile’.  :-)

Björn Höfling <address@hidden> skribis:

> First the full stacktrace, below are some comments:
>
> ./pre-inst-env  guix lint -c cve freecad                         
> Backtrace:reecad@0.18.2-1.dbb4cc6 [cve]...
>           11 (apply-smob/1 #<catch-closure 1a071a0>)
> In ice-9/boot-9.scm:
>     705:2 10 (call-with-prompt _ _ #<procedure default-prompt-handle?>)
> In ice-9/eval.scm:
>     619:8  9 (_ #(#(#<directory (guile-user) 1ac5140>)))
> In guix/ui.scm:
>   1668:12  8 (run-guix-command _ . _)
> In srfi/srfi-1.scm:
>     640:9  7 (for-each #<procedure 1df01a0 at guix/scripts/lint.scm?> ?)
> In guix/scripts/lint.scm:
>    1152:4  6 (run-checkers #<package freecad@0.18.2-1.dbb4cc6 gnu/p?> ?)
> In srfi/srfi-1.scm:
>     640:9  5 (for-each #<procedure 3e473c0 at guix/scripts/lint.scm?> ?)
> In guix/scripts/lint.scm:
>     933:4  4 (check-vulnerabilities _)
>     928:9  3 (_ _)
> In unknown file:
>            2 (force #<promise #<procedure 7f1ce3ab6228 at guix/scrip?>)
> In guix/scripts/lint.scm:
>    917:24  1 (_)
> In ice-9/boot-9.scm:
>     829:9  0 (catch srfi-34 #<procedure 37e64e0 at guix/scripts/lin?> ?)
>
> ice-9/boot-9.scm:829:9: In procedure catch:
> In procedure connect: Connection timed out

[...]

> In guix/scripts/lint.scm:
>     933:4  4 (check-vulnerabilities _)
>     928:9  3 (_ _)
>
> --> 933: Nice, I'm in check-vulnerabilities. But why is there no argument?
> --> What is this strange second line: (_ _)? Why is there nothing written?

Good question, I’m not sure why that happens, but hopefully it’s easily
fixed.

> In unknown file:
>            2 (force #<promise #<procedure 7f1ce3ab6228 at guix/scrip?>)
>
> --> Why is this in a "unknown file"?

Because ‘force’ is implemented in C, so there’s no source location info
available.

> --> Is this force/promise making my stacktrace more unreadable?

No.

> In guix/scripts/lint.scm:
>    917:24  1 (_)
>
> --> Uh. Any more details?. Is "(_)" the call to "(current-vulnerabilities*)"?!

Dunno.  :-/

> In ice-9/boot-9.scm:
>     829:9  0 (catch srfi-34 #<procedure 37e64e0 at guix/scripts/lin?> ?)
>
> ice-9/boot-9.scm:829:9: In procedure catch:
> In procedure connect: Connection timed out
>
> --> Now, wait: The real problem happens somewhere down here and I don't
> have any detailed stacktrace about that?
>
> I have to manually go down into current-vulnerabilities*,
> call/nw/failsaife, etc? Why don't I get the details from here?

Part of what makes information “disappear” from stack traces is the
tail-call optimization (TCO).  If F calls G, and G then calls H in tail
position, then the backtrace will suggest that F called H (G doesn’t
appear at all.)

IIRC Chez Scheme has a fancy trick that allows it to keep track of part
of the “conceptual” stack trace, without losing the space guarantees
that TCO provides.  It cannot come for free though, but I wonder if
Guile should provide it in ‘--debug’ mode or something.

> Is this because in "call-with-networking-fail-safe", line 900 we
> through newly:
>
>         (args
>          (apply throw args))))))
>
> but then the stacktrace gets lost?
>
> Would there be a throw-with-caused-by?

Not sure what you mean, but note that in many cases ‘throw’ itself is
called in tail position, which can also contribute to obfuscating the
stack trace…

Thanks,
Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]