~ chicken-core (chicken-5) ceaff85e6c0fac253a0e8a6b532fbdccaf9642f5
commit ceaff85e6c0fac253a0e8a6b532fbdccaf9642f5 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Jul 16 21:10:35 2010 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Jul 16 21:10:35 2010 +0200 renamed frameinfo toplevel commands; added explanation in manual diff --git a/csi.scm b/csi.scm index 8c03b5ca..188f1b25 100644 --- a/csi.scm +++ b/csi.scm @@ -335,13 +335,13 @@ EOF " " (read-line))))) (if (not (zero? r)) (printf "Editor returned with non-zero exit status ~a" r)))) - ((f) + ((c) (show-frameinfo selected-frame) (##sys#void)) - ((nf) + ((f) (select-frame (read)) (##sys#void)) - ((cf) + ((g) (copy-from-frame (read))) ((s) (let* ((str (read-line)) @@ -364,9 +364,9 @@ EOF ,e FILENAME Run external editor ,s TEXT ... Execute shell-command ,exn Describe last exception - ,f Show frame information - ,nf N Select frame N - ,cf NAME Get variable NAME from current frame + ,c Show call-chain of most recent error + ,f N Select frame N + ,g NAME Get variable NAME from current frame ,t EXP Evaluate form and print elapsed time ,x EXP Pretty print expanded expression EXP\n") (##sys#hash-table-for-each @@ -756,22 +756,23 @@ EOF (printf "~a~a:~a\t~a\t " (if here #\* #\space) i - (if (and finfo (pair? (##sys#slot data 2))) #\. #\space) ; e + (if (and finfo (pair? (##sys#slot data 2))) "[]" " ") ; e (##sys#slot info 0)) ; raw (when cntr (printf "[~a] " cntr)) - (prin1 form) + (when form (prin1 form)) (newline) - (if (and here finfo) - (for-each - (lambda (e v) - (do ((i 0 (fx+ i 1)) - (be e (cdr be))) - ((null? be)) - (printf " ~s:\t " (car be)) - (prin1 (##sys#slot v i)) - (newline))) - (##sys#slot data 2) ; e - (##sys#slot data 3))))))))) ; v + (when (and here finfo) + (for-each + (lambda (e v) + (display " ---\n") + (do ((i 0 (fx+ i 1)) + (be e (cdr be))) + ((null? be)) + (printf " ~s:\t " (car be)) + (prin1 (##sys#slot v i)) + (newline))) + (##sys#slot data 2) ; e + (##sys#slot data 3))))))))) ; v (define select-frame (let ((display display)) diff --git a/manual/Using the interpreter b/manual/Using the interpreter index ccc516ca..1068bb5c 100644 --- a/manual/Using the interpreter +++ b/manual/Using the interpreter @@ -143,11 +143,11 @@ The toplevel loop understands a number of special commands: ; ,exn : Describes the last exception that occurred and adds it to the result history (it can be accessed using the {{#}} notation). -; ,f : Show call-trace items of the most recent error +; ,c : Show call-trace items of the most recent error -; ,nf N : Select call-trace item with the given number, where the number {{0}} indicates the last item in the trace +; ,f N : Select call-trace item with the given number, where the number {{0}} indicates the last item in the trace -; cf NAME : Returns the value of the local variable with the given name (which may be a symbol or string) +; ,g NAME : Returns the value of the local variable with the given name (which may be a symbol or string) ; ,q : Quit the interpreter. @@ -162,6 +162,7 @@ The toplevel loop understands a number of special commands: You can define your own toplevel commands using the {{toplevel-command}} procedure: + === toplevel-command <procedure>(toplevel-command SYMBOL PROC [HELPSTRING])</procedure> @@ -171,6 +172,44 @@ Defines or redefines a toplevel interpreter command which can be invoked by ente read any required argument via {{read}} (or {{read-line}}). If the optional argument {{HELPSTRING}} is given, it will be listed by the {{,?}} command. + +=== Getting error information + +Interpreted code has some extended debugging information available +that can be used to locate errors and obtaining information about the +lexical environment that was effective at the point of error. When an +error occurs in an evaluated expression, a "call trace" is printed - +the list of calls up to the error location. Note that this does not +follow a stack model: it is merely a list of recently made procedure +calls where the last one in the list is (probably) the call of +whatever procedure was executing before the error happened. You can +use the {{,c}} command to show the call-trace of the last +error. Depending on whether compiled or interpreted code was executing +and how much debugging information is available, the call trace shows +trace-buffer entries of the following shape: + + <frame-number>:<environment?> <mode> <procedure-name> <form> + +{{<frame-number>}} gives the number of the call-trace entry, counting +from zero and beginning with the most recent entry. If a {{[]}} +follows the frame-number, then this frame contains the lexical +environment in effect when that procedure call took place. {{<mode>}} +is optional and is either {{<syntax>}} or {{<eval>}} indicating +whether this trace-buffer entry represents a syntax-expansion or an +evaluation and is not given for compiled code. {{<form>}} is also only +available for interpreted code and shows the procedure call +expression, possibly following the name of the procedure containing +the call expression. + +If the trace-buffer entry contains lexical environment information +than the complete environment of the call site is shown. + +Use {{,f}} to select a frame by number, if you want to inspect the +lexical environment of an earlier frame. The {{,g}} command lets you +retrieve the value of a local or lexical variable from the currently +selected frame. Note that the variables are renamed to simplify the +variable lookup done internally by the interpreter. + === Running an external editor The {{,e}} command runs the editor given by:Trap