System call tracing tool for general Unix binaries.
This is a tool that comes with your operating system. If it is not called strace, it may be called truss instead. It is NOT written in Tcl - just a tool that often helps in tracking down problems.
RJ: Actually, strace is in fact also a debugging command in TCL. You can use the TCL exec to get the OS version of strace. - RS: Well, you can use any executable with exec that is on your $PATH...
See also: ktrace
AMG: A classmate of mine referred to strace as "the king of Unix commands."
#!/usr/bin/tclsh
#----------------------------------------------------------------------
# Description : Simplify strace output to allow for easier diffing.
# Date : 01 March 2016
#----------------------------------------------------------------------
# http://ifdeflinux.blogspot.fr/2012/07/simplified-strace-diffing.html
# didn't work properly, and I didn't want to mess about in Python, so
# here is the same only better, in Tcl.
#----------------------------------------------------------------------
if {[llength $::argv] != 1} {
puts "usage $::argv0 <filename>"
exit 1
} else {
lassign $::argv file1
}
try {
file stat $file1 fstat
if { $fstat(type) ne "file" } {
puts "ERROR: $file1 is not a regular file"
exit 1
}
} trap {} {err} {
puts "ERROR: $err"
exit 1
}
try {
set f1 [open $file1]
} trap {} {err} {
puts "ERROR: $err"
exit 1
}
set pidcnt 1
while {[gets $f1 line] >= 0} {
set pidmaybe [regexp -inline {^(\d{1,9}) +} $line]
if { [llength $pidmaybe] == 2 } {
lassign $pidmaybe str pid
if { ![info exists pidlist($pid)] } {
set pidlist($pid) "PID$pidcnt"
incr pidcnt
}
set line [regsub "^$str" $line "$pidlist($pid) "]
}
set line [regsub {0x0{1,16}} $line "0xNULL"]
set line [regsub {0x[0-9A-Fa-f]{1,16}} $line "0xADDR"]
set line [regsub {\d{2}:\d{2}:\d{2}} $line "HH:MM:SS"]
set line [regsub {\d{4}/\d{2}/\d{2}} $line "YYYY/MM/DD"]
puts $line
}
close $f1