[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Add new debug meta-command ,error
From: |
Jose A. Ortega Ruiz |
Subject: |
[PATCH] Add new debug meta-command ,error |
Date: |
Mon, 30 Aug 2010 06:52:11 +0200 |
* module/system/repl/debug.scm: <debug> stores the error string in a
new field.
* module/system/repl/error-handling.scm: use the error string to
construct the <debug> instance.
* module/system/repl/command.scm: new debug command `error' that
extracts the new <debug> field.
Signed-off-by: Jose A. Ortega Ruiz <address@hidden>
---
module/system/repl/command.scm | 12 +++++++++---
module/system/repl/debug.scm | 4 ++--
module/system/repl/error-handling.scm | 26 ++++++++++++++++----------
3 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/module/system/repl/command.scm b/module/system/repl/command.scm
index 8a62a16..52b0708 100644
--- a/module/system/repl/command.scm
+++ b/module/system/repl/command.scm
@@ -6,12 +6,12 @@
;; modify it under the terms of the GNU Lesser General Public
;; License as published by the Free Software Foundation; either
;; version 3 of the License, or (at your option) any later version.
-;;
+;;
;; This library is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Lesser General Public License for more details.
-;;
+;;
;; You should have received a copy of the GNU Lesser General Public
;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
@@ -55,7 +55,7 @@
(disassemble x) (disassemble-file xx))
(profile (time t) (profile pr) (trace tr))
(debug (backtrace bt) (up) (down) (frame fr)
- (procedure proc) (locals))
+ (procedure proc) (locals) (error e))
(inspect (inspect i) (pretty-print pp))
(system (gc) (statistics stat) (option o)
(quit q continue cont))))
@@ -474,6 +474,12 @@ Trace execution."
body body* ...)
(format #t "Nothing to debug.~%"))))))))
+(define-meta-command (error repl)
+ "error
+Display the original error message."
+ (let ((debug (repl-debug repl)))
+ (format #t "~a~%" (if debug (debug-error-message debug) ""))))
+
(define-stack-command (backtrace repl #:optional count
#:key (width 72) full?)
"backtrace [COUNT] [#:width W] [#:full? F]
diff --git a/module/system/repl/debug.scm b/module/system/repl/debug.scm
index 293b790..1876d31 100644
--- a/module/system/repl/debug.scm
+++ b/module/system/repl/debug.scm
@@ -30,7 +30,7 @@
#:use-module ((system vm inspect) #:select ((inspect . %inspect)))
#:use-module (system vm program)
#:export (<debug>
- make-debug debug? debug-frames debug-index
+ make-debug debug? debug-frames debug-index debug-error-message
print-locals print-frame print-frames frame->module
stack->vector narrow-stack->vector))
@@ -66,7 +66,7 @@
;;; accessors, and provides some helper functions.
;;;
-(define-record <debug> frames index)
+(define-record <debug> frames index error-message)
diff --git a/module/system/repl/error-handling.scm
b/module/system/repl/error-handling.scm
index db0beeb..e77ea96 100644
--- a/module/system/repl/error-handling.scm
+++ b/module/system/repl/error-handling.scm
@@ -32,6 +32,16 @@
;;; Error handling via repl debugging
;;;
+(define (error-string stack key args)
+ (with-output-to-string
+ (lambda ()
+ (pmatch args
+ ((,subr ,msg ,args . ,rest)
+ (display-error (vector-ref stack 0) (current-output-port)
+ subr msg args rest))
+ (else
+ (format #t "Throw to key `~a' with args `~s'." key args))))))
+
(define* (call-with-error-handling thunk #:key
(on-error 'debug) (post-error 'catch)
(pass-keys '(quit)))
@@ -45,7 +55,7 @@
(lambda ()
(with-error-to-port err
thunk))))))
-
+
(catch #t
(lambda () (%start-stack #t thunk))
@@ -75,7 +85,7 @@
(if (procedure? post-error)
post-error ; a handler proc
(error "Unknown post-error strategy" post-error))))
-
+
(case on-error
((debug)
(lambda (key . args)
@@ -85,22 +95,18 @@
(make-stack #t)
;; Cut three frames from the top of the stack:
;; make-stack, this one, and the throw handler.
- 3
+ 3
;; Narrow the end of the stack to the most recent
;; start-stack.
tag
;; And one more frame, because %start-stack invoking
;; the start-stack thunk has its own frame too.
0 (and tag 1)))
- (debug (make-debug stack 0)))
+ (error-msg (error-string stack key args))
+ (debug (make-debug stack 0 error-msg)))
(with-saved-ports
(lambda ()
- (pmatch args
- ((,subr ,msg ,args . ,rest)
- (display-error (vector-ref stack 0) (current-output-port)
- subr msg args rest))
- (else
- (format #t "Throw to key `~a' with args `~s'." key args)))
+ (format #t error-msg)
(format #t "Entering a new prompt. ")
(format #t "Type `,bt' for a backtrace or `,q' to continue.\n")
((@ (system repl repl) start-repl) #:debug debug))))))
--
1.7.1
- [PATCH] Add new debug meta-command ,error,
Jose A. Ortega Ruiz <=
- Re: [PATCH] Add new debug meta-command ,error, Andy Wingo, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Jose A. Ortega Ruiz, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Andy Wingo, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Jose A. Ortega Ruiz, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Andy Wingo, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Jose A. Ortega Ruiz, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Andy Wingo, 2010/08/30
- Re: [PATCH] Add new debug meta-command ,error, Jose A. Ortega Ruiz, 2010/08/31