跟蹤文檔指出「如果執行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