Welcome, guest | Sign In | My Account | Store | Cart

Of course, Tcl's most minimal debugger is puts. But here is a cute little piece of code that offers some more debugging functionality (if you have stdin and stdout available - so not for wish on Windows)

Tcl, 21 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
proc bp {{s {}}} {
    if {![info exists ::bp_skip]} {
	set ::bp_skip [list]
    } elseif {[lsearch -exact $::bp_skip $s]>=0} {
	return
    }
    set who [info level -1]
    while 1 {
	# Display prompt and read command.
	puts -nonewline "$who/$s> "; flush stdout
	gets stdin line

	# Handle shorthands
	if {$line=="c"} {puts "continuing.."; break}
	if {$line=="i"} {set line "info locals"}

	# Handle everything else.
	catch {uplevel 1 $line} res
	puts $res
    }
}

The idea is that you insert breakpoints, calls to bp, in critical code with an optional string argument (that may be used for distinguishing), like this: <pre> proc foo {args} { set x 1 bp 1 string toupper $args } foo bar and grill </pre> When execution reaches bp, you get a prompt on stdout, giving the calling context and the bp string, like this: <pre> foo bar and grill/1> pwd /home/suchenwi/src/roi/test/mr foo bar and grill/1> i args x foo bar and grill/1> set args bar and grill foo bar and grill/1> set args lowercase lowercase foo bar and grill/1> c </pre> on which you can issue any Tcl command (especially getting or setting variable values in the scope of foo), shorthand commands ("i" for "info locals"; add which others you need), and exit this micro-debugger with "c"(ontinue). Because you modified a local variable, foo's result will be <pre> LOWERCASE </pre> To turn off all breakpoints for an application, just say (maybe from inside bp): <pre> proc bp args {} </pre> You can disable single breakpoints labeled e.g. x with the command <pre> lappend ::bp_skip x </pre> Stepping would be a bigger project, but in some situations a micro-debugger like this is good enough. See also (http://www.purl.org/thecliff/tcl/wiki/473.html) What debugging tools are available to a Tcl programmer on the Wiki.

Created by Jeff Hobbs on Thu, 21 Jun 2001 (MIT)
Tcl recipes (162)
Jeff Hobbs's recipes (16)

Required Modules

  • (none specified)

Other Information and Tasks