Posted to tcl by dgp at Thu Aug 08 14:58:48 GMT 2013view raw

  1. % proc report args {
  2. set frame [info frame]
  3. set i 1
  4. while {$i <= $frame} {
  5. puts "FRAME $i: [info frame $i]"
  6. incr i
  7. }
  8. catch error m o
  9. puts "STACK: [dict get $o -errorstack]"
  10. }
  11. % proc demo {} {uplevel 1 report}
  12. % demo
  13. FRAME 1: type eval line 1 cmd demo level 1
  14. FRAME 2: type proc line 1 cmd {uplevel 1 report} proc ::demo
  15. FRAME 3: type eval line 1 cmd report proc ::demo
  16. FRAME 4: type proc line 5 cmd {info frame $i} proc ::report level 0
  17. STACK: INNER {invokeStk1 error} CALL report
  18. % namespace unknown report
  19. report
  20. % nosuch
  21. FRAME 1: type eval line 1 cmd nosuch level 1
  22. FRAME 2: type proc line 5 cmd {info frame $i} proc ::report level 0
  23. STACK: INNER {invokeStk1 error} CALL {report nosuch}
  24.  
  25. The -errorstack doesn't hide away the command [report] in the
  26. history.
  27.  
  28. Strange (and something of a shame) there's not a common foundation.