1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-24 13:30:21 +02:00

* debugger.scm ("p"): New alias for "evaluate";

Mark module with :no-backtrace.
("position"): New command.
(source-position, display-position): New procedures.
(display-source): Display position of expression, if available.
(catch-user-errors): Return #f on error.  (Commands are expected
to return a valid state.)
(read-and-dispatch-command): Bugfix: Return old state on error.
This commit is contained in:
Mikael Djurfeldt 1999-09-16 21:26:27 +00:00
parent bbfba54575
commit 8b8fd2e3ce

View file

@ -18,7 +18,10 @@
;;; Boston, MA 02111-1307 USA ;;; Boston, MA 02111-1307 USA
(define-module (ice-9 debugger) (define-module (ice-9 debugger)
:use-module (ice-9 debug)) :use-module (ice-9 debug)
:use-module (ice-9 format)
:no-backtrace
)
(if (memq 'readline *features*) (if (memq 'readline *features*)
(define-module (ice-9 debugger) (define-module (ice-9 debugger)
@ -63,9 +66,10 @@
(discard-rest-of-line port) (discard-rest-of-line port)
(catch-user-errors port (lambda () (run-last-command state)))) (catch-user-errors port (lambda () (run-last-command state))))
(else (else
(catch-user-errors port (or (catch-user-errors port
(lambda () (lambda ()
(dispatch-command token command-table state port))))))) (dispatch-command token command-table state port)))
state)))))
(define (run-last-command state) (define (run-last-command state)
(let ((procedure (fluid-ref last-command))) (let ((procedure (fluid-ref last-command)))
@ -77,7 +81,8 @@
thunk thunk
(lambda (key . objects) (lambda (key . objects)
(apply user-warning objects) (apply user-warning objects)
(discard-rest-of-line port)))) (discard-rest-of-line port)
#f)))
(define last-command (make-fluid)) (define last-command (make-fluid))
@ -510,6 +515,20 @@ An argument specifies the frame to select; it must be a stack-frame number."
(write-state-short state) (write-state-short state)
state))) state)))
(define-command "position" '()
"Display the position of the current expression."
(lambda (state)
(let* ((frame (stack-ref (state-stack state) (state-index state)))
(source (frame-source frame)))
(if (not source)
(display "No source available for this frame.")
(let ((position (source-position source)))
(if (not position)
(display "No position information available for this frame.")
(display-position position)))))
(newline)
state))
(define-command "up" '('optional exact-integer) (define-command "up" '('optional exact-integer)
"Move N frames up the stack. For positive numbers N, this advances "Move N frames up the stack. For positive numbers N, this advances
toward the outermost frame, to higher frame numbers, to frames toward the outermost frame, to higher frame numbers, to frames
@ -612,6 +631,7 @@ If the number of frames aren't explicitly given, the debug option
(define-command-alias '("info" "f") '("info" "frame")) (define-command-alias '("info" "f") '("info" "frame"))
(define-command-alias "bt" "backtrace") (define-command-alias "bt" "backtrace")
(define-command-alias "where" "backtrace") (define-command-alias "where" "backtrace")
(define-command-alias "p" "evaluate")
(define-command-alias '("info" "stack") "backtrace") (define-command-alias '("info" "stack") "backtrace")
;;;; Command Support ;;;; Command Support
@ -723,12 +743,22 @@ If the number of frames aren't explicitly given, the debug option
(newline)) (newline))
(define (display-source frame) (define (display-source frame)
(display " ") (let* ((source (frame-source frame))
(write (let* ((source (frame-source frame)) (copy (source-property source 'copy)))
(copy (source-property source 'copy))) (cond ((source-position source)
(if (pair? copy) => (lambda (p) (display-position p) (display ":\n"))))
copy (display " ")
(unmemoize source))))) (write (or copy (unmemoize source)))))
(define (source-position source)
(let ((fname (source-property source 'filename))
(line (source-property source 'line))
(column (source-property source 'column)))
(and fname
(list fname line column))))
(define (display-position pos)
(format #t "~A:~D:~D" (car pos) (+ 1 (cadr pos)) (+ 1 (caddr pos))))
(define (write-frame-long/expression frame) (define (write-frame-long/expression frame)
(display "This frame is an evaluation.") (display "This frame is an evaluation.")