Subject: Re: bug#36677: [PATCH] Don't truncate backtraces

From: Robert Vollmert <[email-masked]>
Date: Sun, 21 Jul 2019 17:35:35 +0200

> On 17. Jul 2019, at 20:11, Robert Vollmert <[email-masked]> wrote:
> 
> 
> 
>> On 17. Jul 2019, at 19:57, Mark H Weaver <[email-masked]> wrote:
>> 
>> Hi Robert,
>> 
>> Robert Vollmert <[email-masked]> writes:
>> 
>>> * module/system/repl/debug.scm (print-frame): Print full object if
>>> width keyword is #f.
>>> * libguile/backtrace.c (display_backtrace_body): Call print-frames
>>> with #:width #f.
>>> ---
>>> 
>>> This change was prompted by recent discussion on the Guix lists:
>>> https://lists.gnu.org/archive/html/guix-devel/2019-07/msg00207.html
>>> In Guix, the truncation of stack traces frequently obscures
>>> important information due to the long filenames.
>> 
>> I'm sympathetic to this problem, but simply disabling the truncated
>> printing during backtraces is not workable.  It is quite often the case
>> that some of the structures printed in backtraces are *huge*, or even
>> cyclic.
>> 
>> Have you tried setting the COLUMNS environment variable to a larger
>> value?  I'd prefer a solution along those lines, where the user can set
>> an environment variable to ask for less truncation in backtraces.
> 
> Defaulting to something longer than 80 might be workable, say 250?
> 
> I don’t think that it should be necessary to set an environment variable
> to get usable stack traces…

I’d like to add that the current code to determine terminal width
seems to be broken. COLUMNS is a bash-local variable, it’s not typically
set anywhere as an environment variable.

Some ways to get actual terminal size:

$ tput cols  # from ncurses
80
$ stty size  # from coreutils
25 80

Though it’s unclear how these work in non-interactive situations.