如何检索执行跟踪命令前缀期间发生的错误

时间:2013-03-25 23:49:13

标签: tcl

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

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

我得到“你好”

1 个答案:

答案 0 :(得分: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

这是tclsh8.5中的a known bug(由于在8.5和8.4之间实现跟踪的方式的变化),这在下一个版本(8.5.14)中得到修复。我们只是测试发布候选者,所以修复程序应该广泛使用Real Soon。