TCL (Tool Command Language)
Writing TCL Extensions In C
A good description of TCL dual-ported objects and reference counts is here.
Trace
See the trace man page.
The following is a rather basic little example of putting a "trace" on a variable that will be executed everytime a variable is accessed. It doesn't do much other than print to stdout but could be augmented to write to a file or do something more complicated if required. It also only supports reading and writing to a simple variable: arrays are not supported and unsetting the variable is not supported.
% proc jeh_trace {n1 n2 op} { upvar $n1 n1ref if {"$op" == "read"} { set var_exists [uplevel 1 "info exists $n1"] if {$var_exists} { puts "Reading $n1 as $n1ref" } else { puts "Trying to read $n1 but it does not exist" } } else { puts "Setting $n1 to $n1ref" } } % trace add variable jehtech {read write} jeh_trace % set jehtech Trying to read jehtech but it does not exist can't read "jehtech": no such variable % set jehtech "jehtech" Setting jehtech to jehtech jehtech % set jehtech Reading jehtech as jehtech jehtech