Subject: Unreadable Stacktrace Example

From: Björn Höfling <[email-masked]>
Date: Tue, 2 Jul 2019 13:12:45 +0200

X-Debbugs-CC: Robert Vollmert <[email-masked]>

Hello,

in the 1.0-beyond-discussions, Robert asked that Stacktraces should be
more clear. I refer to this message (lists.gnu.org is down, so I
cannot link):

From: Ludovic Courtès <[email-masked]>
To: Robert Vollmert <[email-masked]>
Subject: Re: Guix beyond 1.0: let’s have a roadmap!
Message-ID: <[email-masked]>

Here is my example. I'm on top of

48eb71aea807262210c38b5fb675d747adfccff3

First the full stacktrace, below are some comments:

./pre-inst-env  guix lint -c cve freecad                         
Backtrace:[email-masked] [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 [email-masked] 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

OK, this is semi-readable but I will explain a bit what I find
strange/unreadable:

In guix/scripts/lint.scm:
   1152:4  6 (run-checkers #<package [email-masked] gnu/p?> ?)

--> OK: This is perfectly readable. I know in which procedure I am,
in which line, the line matches my source code. Fine.

In srfi/srfi-1.scm:
    640:9  5 (for-each #<procedure 3e473c0 at guix/scripts/lint.scm?> ?)

--> This is OK, though it could print the line of the procedure?

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?
Is that due to tail-recursion?

In unknown file:
           2 (force #<promise #<procedure 7f1ce3ab6228 at guix/scrip?>)

--> Why is this in a "unknown file"?
--> Is this force/promise making my stacktrace more unreadable?

In guix/scripts/lint.scm:
   917:24  1 (_)

--> Uh. Any more details?. Is "(_)" the call to "(current-vulnerabilities*)"?!

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?

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?

Björn