Posted to tcl by gps at Wed Mar 11 08:00:44 GMT 2009view raw
- set fd [open [lindex $argv 0] r]
- set data [read $fd]
- close $fd
- array set objs {}
- foreach line [split $data \n] {
- if {[string match "new objPtr *" $line]} {
- set linelist [split $line]
- set addr [string trim [lindex $linelist 2]]
- #puts "add ADDR:$addr"
- if {[info exists objs($addr)]} {
- puts "re-newing an object that wasn't freed; $addr"
- puts "\tpreviously contained: $objs($addr)"
- }
- set objs($addr) [lrange $linelist 3 end]
- } elseif {[string match "freeing objPtr*" $line]} {
- set linelist [split $line]
- set addr [string trim [lindex $linelist 2]]
- if {![info exists objs($addr)]} {
- puts "invalid freed object: $addr : $line"
- } else {
- #puts "removing ADDR:$addr"
- unset objs($addr)
- }
- }
- }
- #parray objs
- array set stats {}
- foreach {key value} [array get objs] {
- lassign [split $value] _ file _ line
- set skey "$file $line"
- if {[info exists stats($skey)]} {
- incr stats($skey)
- } else {
- set stats($skey) 1
- }
- }
- parray stats