1

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

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

我只是得到“你好”

4

1 回答 1

0

首先,由hello程序打印,而不是由程序返回。执行跟踪不会捕获打印输出。(您可以通过在通道上分层变换来捕获 Tcl 8.6 中的打印输出stdout,但这是完全不同的事情。)

因此,让我们将您的代码改为这样,这样可以更清楚地了解正在发生的事情:

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 构建),我得到了这个(最后一行是错误消息):

你好
b:a 0 flimgargle 离开
坏的东西

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

你好
b:a 0 flimgargle 离开
漱口水

这是tclsh8.5 中的一个已知错误(由于在 8.5 和 8.4 之间实现跟踪的方式发生了变化),该错误将在下一个版本 (8.5.14) 中修复。我们只是为此测试候选版本,所以修复应该很快就会广泛可用。

于 2013-03-26T10:48:31.187 回答