跟踪文档指出“如果执行commandPrefix时发生错误,那么命令名称作为整体将返回相同的错误。”但是,当我执行下面的代码时,我看不到错误,它具有错误的命令前缀。我如何得到这个错误信息?如何检索在执行跟踪命令期间发生的错误前缀
proc a args { puts hello }
proc b args { bad stuff }
trace add execution a leave b
a
我只是得到 “你好”
跟踪文档指出“如果执行commandPrefix时发生错误,那么命令名称作为整体将返回相同的错误。”但是,当我执行下面的代码时,我看不到错误,它具有错误的命令前缀。我如何得到这个错误信息?如何检索在执行跟踪命令期间发生的错误前缀
proc a args { puts hello }
proc b args { bad stuff }
trace add execution a leave b
a
我只是得到 “你好”
首先,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)。我们只是测试版本的候选版本,所以修复应该很快就会被广泛使用。
我试过tclsh8.4,我看到错误信息,并且$ errorInfo设置正确,错误堆栈显示正确。 – 2013-03-26 16:10:24
可能相关:[catch leave trace regression](http://sourceforge.net/tracker/?func=detail&aid=3608676&group_id=10894&atid=110894) – 2013-03-26 09:27:22
不是“可能”;这正是那个错误。 – 2013-03-26 10:48:56