跟踪文档指出“如果在执行commandPrefix时发生错误,那么命令名称作为一个整体将返回相同的错误。”但是,当我执行下面的代码时,我没有看到错误,该代码具有错误的命令前缀。我如何获得此错误信息?
proc a args { puts hello }
proc b args { bad stuff }
trace add execution a leave b
a
我得到“你好”
答案 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。