跟踪文档指出“如果在执行 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
程序打印,而不是由程序返回。执行跟踪不会捕获打印输出。(您可以通过在通道上分层变换来捕获 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) 中修复。我们只是为此测试候选版本,所以修复应该很快就会广泛可用。