Debugging is the of process diagnosing and correcting unexpected behaviour of programs.


There are many debugging techniques, ranging from simple puts commands added appropriately to visually oriented tools supporting breakpoints, etc.

Use of a virtualization environment such as VMware, or the free alternative, VirtualBox , allow one to set up an entire environment - perhaps even unique operating system - then perform testing with less impact on the machine itself.

If you are testing across various platforms, you might find Virtual Network Computing (VNC) (also known as remote control) helpful software, as it allows you to connect to other computers and interact with them as if you were sitting with with that software installed on your desktop.

See Also

Category Debugging
many of which provide debugging functionality along with other features
Profiling Tcl
Static syntax analysis
Tools for the analysis of source code.


call graph

Tools for Dynamic Analysis

a basic debugger
a debugger with syntax highlighting using ctext
AddressSanitizer (asan)
A memory error detector for C/C++.
A minimal debugger
A patch for Tcl 8.5 is available at the website
d: A handy little debugging proc
by Ed Suominen, for development of PRIVARIA [L1 ], an end-user TCL app with a lot going on inside.
a minimal debugger
implements breakpoints, allowing to run any Tcl command, including inspecting and setting the local variables...
Takes a large C or C++ program that has a property of interest (such as triggering a compiler bug) and automatically produces a much smaller C/C++ program that has the same


a mixed debug-message / stack backtrace introspection "puts"
Flow tracing
Replace proc to provide a graphical display of flow of a script.
Offline parallel debugger; works by collecting user-specified data during the execution of a job and storing it in a database, which is available for offline inspection. Also includes dynamic breakpoint API, which allows attaching Tcl scripts to breakpoints to be executed when breakpoint is hit.
MemorySanitizer (msan)
A detector of uninitialized memory reads in C/C++ programs.
Guarded proc
RS: monitors or prevents redefining an existing proc
a stand alone application that queries a running Tk application and then displays its state. This allows you to display current variable values and modify procs or variables. A Tix-enabled version of it is in TixInspect. The Tcl Dev Kit provides an enhanced version of TkInspect since release 2.5.
[L2 ]: by Jeff Hobbs. A great way to interact with a running Tcl/Tk application. It can be attached to any Tcl/Tk interpreter or namespace and allows any modification. This application comes bundled with ActiveTcl and therefore also with Tcl Dev Kit. Sports facilities such as idedebug and observe , which provide sophisticated breakpoint and tracing facilities, and hot errors, which displays the source of the proc in dig-down style
Tracing with enterstep
How to limit the output from tracing, plus a method for performing intelligent single-stepping without modifying the source.
undefined behaviour sanitizer (UBsan)
Not a program, but a compiler options for gcc and llvm/Clang that instrument instructions to detect out-of-bounds and use-after-free bugs.
Electric Fence
A drop-in replacement for proc that provides a hook prior to the evaluation of command, and another hook for exceptional return codes.
A graphical debugger/IDE.
Yet another Tcl debugger
Tagma Debugger
A rewrite of Yet another Tcl debugger.
A popular open-source debugger originally sold by Scriptics. Provides not only static and dynamic debugging aids, but similar to basekits, also a way to create a single distribution file that contain all the pieces one needs to execute a Tcl program.
providing source code viewing as you step thru the code, breakpoints on specific lines and procs, and ability to set watchpoints on variables
a Tk based debugger that is sourced into your script. Works conceptually like the emacs-lisp debugger. An updated version of it is in TixDebug.
The 'tracecommand' extension
based on a patch [L3 ] [does Vince Darley have a more recent version of this?] to the Tcl core, is available from the scriptics bug database [we need a URL here]. It can be used to dump before/after command+argument+result evaluations both globally or only inside a given command or procedure. It is similar to the 'trace dump' facility available in the Tcl-scripted MacOS editor 'Alpha'.
a Java-like object interface which provides debugging facilities. escargo 2004-02-04: dead link.
(Wrapped Application Debugger) is an embedded debugging system that is intended to simplify the task of debugging scripting language extensions. It does this by converting catastrophic errors such as segmentation faults and failed assertions into scripting language exceptions. This, in turn, allows a scripting language interpreter to generate an informative cross-language stack trace. By the author of SWIG.
A debugging and dynamic instrumentation tool delivered as a Tcl library that wraps the DynInst API. The DynInst package allows changing program values and injecting code into running binaries. Dyner provides extra functionality on top of Dyninst such as declaration of new variables, navigational commands for type system, function trace facility and efficient conditional breakpoints.
Pronounced "red-cross". Tcl loadable library in C/C++, a system tool providing scriptable access to low level system calls, hypervisor calls, system information, etc.; e.g.:
  • kernel symbols
  • memory usage (free)
  • process list (/proc)
  • memory hogs
An ultra lightweight code editor and a small IDE that provides debugging environment for C, C++, Ruby, mruby, Lua, Python, PHP, Perl and Tcl. It was originally developed to provide a native scripting language debugging environment that seamlessly integrated with C and C++, and with an efficient code navigation and call routines tracing ability.
browsing variables, editing procs, viewing widget hierarchies, browser/inspector for actions scheduled by after, channel browser


A Debugging Primer
an excerpt Debugging: The 9 Indispensable Rules For Finding Even the Most Elusive Software and Hardware Problems, David J. Agans
How to be a Programmer: A Short, Comprehensive, and Personal Summary, Robert L. Read, 2002
PYK 2012-12: a quick glance-through indicates that this is worth the read. Others have received it positively as well.

See Also

C compiled image processing on an interactive Bwise canvas
Commonly encountered problems in Tcl
Debugging Aid For Production Code
Debugging Expect programs
debug with trace
Dynamic Debugger
A strange breed. For whatever reason, many programmers are either unfamilar or dissatisfied with most of the products in this category.
Debugging via introspection
Effective ways to request help with Tcl-related problems
Favorite debugging techniques applicable to Tcl
Help! My Tcl application just crashed!
How to debug memory faults in Tcl and extensions
Leak Hunt (C level)
List the call stack
Memory introspection
Important when trying to find bugs going into the C-level, especially hard to pin-down memory trouble.
Displays the calling sequence for a proc.
regular expression debugging tips
Static syntax analysis
Static code checkers are tools which read your Tcl code and attempt to identify either real, or potential, problems. This is similar to the Unix lint command.
Steppin' out
uses Tcl's own command tracing
traceproc helper
specify a list of commands to monitor, and see the actual arguments passed to the commands when they are run, as well as the result.
what debugging tools are available to a Tcl programmer
Whole-Script Tracing

Components with Debugging Features

Tcl itself
provides enhanced command tracing since release 8.4 (See TIP #62). Example of usage is at Steppin' out.
comes with several useful debugging commands.
comes with commands for profiling and debugging facilities, for example cmdtrace. Break down program runtime by procedure.
includes a debugging message system.
Source Navigator
an IDE with code comprehension features. It is written in Tcl/Tk/itcl, but allows you to understand code written in a wide variety of languages.


GSoC Idea: Debugging tools for NRE