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 Leave
悪い質

tclsh8.5(具体的には8.5.2)を使用すると、次のようになります。

こんにちは
b:a 0 flimgargle Leave
flimgargle

これはtclsh8.5の既知のバグであり(8.5から8.4の間でトレースの実装方法が変更されたため)、次のリリース(8.5.14)で修正されています。そのためのリリース候補をテストしているだけなので、修正はRealSoonで広く利用できるようになるはずです。

于 2013-03-26T10:48:31.187 に答える