2013-03-25 57 views
1

跟蹤文檔指出「如果執行commandPrefix時發生錯誤,那麼命令名稱作爲整體將返回相同的錯誤。」但是,當我執行下面的代碼時,我看不到錯誤,它具有錯誤的命令前綴。我如何得到這個錯誤信息?如何檢索在執行跟蹤命令期間發生的錯誤前綴

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

我只是得到 「你好」

+1

可能相關:[catch leave trace regression](http://sourceforge.net/tracker/?func=detail&aid=3608676&group_id=10894&atid=110894) – 2013-03-26 09:27:22

+0

不是「可能」;這正是那個錯誤。 – 2013-03-26 10:48:56

回答

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 

這是a known bug在tclsh8.5(由於在跡線如何8.5和8.4之間變化來實現),其被固定在所述下一個版本(8.5.14)。我們只是測試版本的候選版本,所以修復應該很快就會被廣泛使用。

+0

我試過tclsh8.4,我看到錯誤信息,並且$ errorInfo設置正確,錯誤堆棧顯示正確。 – 2013-03-26 16:10:24

相關問題