From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:54088) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jDWdO-0001qt-BN for guix-patches@gnu.org; Sun, 15 Mar 2020 13:01:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jDWdM-0006pw-G2 for guix-patches@gnu.org; Sun, 15 Mar 2020 13:01:06 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:57660) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jDWdL-0006lj-AP for guix-patches@gnu.org; Sun, 15 Mar 2020 13:01:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jDWdK-0001jl-99 for guix-patches@gnu.org; Sun, 15 Mar 2020 13:01:02 -0400 Subject: [bug#40077] [PATCH 0/4] Inferior provide stack traces along with exceptions Resent-Message-ID: Received: from eggs.gnu.org ([2001:470:142:3::10]:53534) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jDWcq-0001cl-7o for guix-patches@gnu.org; Sun, 15 Mar 2020 13:00:33 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Date: Sun, 15 Mar 2020 18:00:19 +0100 Message-Id: <20200315170019.22544-1-ludo@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 40077@debbugs.gnu.org Cc: Ludovic =?UTF-8?Q?Court=C3=A8s?= Hello! This patch series allows inferiors to provide stack traces when an exception is thrown. The wire format needed to be changed to provide that info, and thus the protocol had to be adjusted to support both forward and backward compatibility: a new client must be able to talk to an old ‘guix repl’, and an old client must be able to talk to a new ‘guix repl’. To that end, clients now send the protocol version they support. Note that, with these patches, stack traces are available but inferior exceptions are not reported more nicely than before: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (open-inferior "/home/ludo/src/guix" #:command "scripts/guix") $1 = #< pid: pipe socket: # close: # version: (0 1 1) packages: #> table: #>> scheme@(guile-user)> (inferior-eval '(throw 'x 'y 'z) $1) ice-9/boot-9.scm:1669:16: In procedure raise-exception: ERROR: 1. &inferior-exception: arguments: (x y z) inferior: #< pid: pipe socket: # close: # version: (0 1 1) packages: #> table: #>> stack: ((#f ("ice-9/boot-9.scm" 1763 13)) (raise-exception ("ice-9/boot-9.scm" 1668 16)) (#f (#f #f #f)) (#f ("guix/repl.scm" 92 21)) (with-exception-handler ("ice-9/boot-9.scm" 1735 10)) (with-exception-handler ("ice-9/boot-9.scm" 1730 15)) (#f ("guix/repl.scm" 119 7))) Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. --8<---------------cut here---------------end--------------->8--- This is left as an exercise to the reader. Feedback welcome! Ludo’. Ludovic Courtès (4): repl: Allow clients to send their protocol version. inferior: Adjust to protocol (0 1). repl: Return stack traces along with exceptions. inferior: '&inferior-exception' includes a stack trace. guix/inferior.scm | 24 +++++++++++-- guix/repl.scm | 86 ++++++++++++++++++++++++++++++++++++++-------- tests/inferior.scm | 3 ++ 3 files changed, 97 insertions(+), 16 deletions(-) -- 2.25.1