Debugging commands


Scheme48 includes a debugger and an inspector.

Debugging commands

Sort of like a backtrace, but because of tail recursion you see less than you might in debuggers for some other languages.

Invoke the inspector on the threads running on the next level out.

,proceed < exp > ...
Proceed after an interrupt or error, delivering the values of ... to the continuation.

,trace < name > ...
Start tracing calls to the named procedure or procedures. With no arguments, displays all procedures currently traced. This affects the binding of <name>, not the behavior of the procedure that's it's current value. The effect is similar to (define <name> (make-traced <name>)) where make-traced is a procedure-returning procedure.

,untrace < name > ...
Stop tracing calls to the named procedure or procedures. With no argument, stop tracing all calls to all procedures.

The ,condition command selects and displays the condition object describing the error or interrupt that initiated the current command level. This is particularly useful in conjunction with the inspector. E.g. if a procedure is passed the wrong number of arguments, do ,condition followed by ,inspect ## to inspect the procedure and its arguments.

,bound? < name >
Display the binding of <name>, if there is one.

,expand < name >
Show macro expansion of <form>, if any.

,where < procedure >
Display name of source file in which <procedure> is defined.


There is a low-tech inspector available via the ,inspect and ,debug commands. The ,inspect command starts an inspector command loop. There is a focus object (the same as the command processor's ##), for which a menu of selectable components is displayed. To inspect a particular component, just type the corresponding number in the menu. For example:

	,inspect '(a (b c) d)
	(a (b c) d)

	[0] a
	[1] (b c)
	[2] d
	inspect: 1
	(b c)

	[0] b
	[1] c

When a new object is selected, the previous one is pushed onto a stack. You can pop the stack, reverting to the previous object, with the U command.

The inspector is particularly useful with procedures, continuations, and records.

Other inspector commands:

pop object stack
down stack (current object must be a continuation)
print more of a long menu
evaluate a form and select result
select a closure or continuation's template

## is always the object currently being inspected. After a Q command, or an error in the inspector, ## is the last object that was being inspected.

The inspector also accepts arbitrary command processor commands, e.g. the ,dis command (see below). The leading comma is optional.

After an error occurs, ,debug invokes the inspector on the continuation at the point of the error. The U and D (up and down) commands then make the inspector look like a conventional stack debugger, with continuations playing the role of stack frames. D goes to older or deeper continuations (frames), and U goes back up to more recent ones.

Templates are the static components of procedures; these are found inside of procedures and continuations, and contain the quoted constants and top-level variables referred to by byte-compiled code.


Ownership, Maintenance and Disclaimers

Scheme48 Manual Top Page

Envision Manual Top Page

Last modified