2013-03-25 93 views
1

跟踪文档指出“如果执行commandPrefix时发生错误,那么命令名称作为整体将返回相同的错误。”但是,当我执行下面的代码时,我看不到错误,它具有错误的命令前缀。我如何得到这个错误信息?如何检索在执行跟踪命令期间发生的错误前缀

proc a args { puts hello } 
proc b args { bad stuff } 
trace add execution a leave b 
a 

我只是得到 “你好”

+1

可能相关:[catch leave trace regression](http://sourceforge.net/tracker/?func=detail&aid=3608676&group_id=10894&atid=110894) – 2013-03-26 09:27:22

+0

不是“可能”;这正是那个错误。 – 2013-03-26 10:48:56

回答

0

首先,hello由过程印刷,不通过它返回。执行跟踪不会捕获打印输出。 (由分层的stdout通道变换可以陷阱打印输出中的Tcl 8.6,但是这是一个完全不同的东西。)

所以,让我们更改您的代码此相反,这是正在发生的事情更清楚:

proc a args { puts hello; return flimgargle } 
proc b args { puts "b:$args"; error "bad stuff" } 
trace add execution a leave b 
puts [a] 

随着tclsh8.4和tclsh8.6(内置注销当前发展HEAD),我得到这个(与最后一行是一条错误消息):

 
hello 
b:a 0 flimgargle leave 
bad stuff 

随着tclsh8.5(特别是8.5.2),我得到这个:

 
hello 
b:a 0 flimgargle leave 
flimgargle 

这是a known bug在tclsh8.5(由于在迹线如何8.5和8.4之间变化来实现),其被固定在所述下一个版本(8.5.14)。我们只是测试版本的候选版本,所以修复应该很快就会被广泛使用。

+0

我试过tclsh8.4,我看到错误信息,并且$ errorInfo设置正确,错误堆栈显示正确。 – 2013-03-26 16:10:24