グローバル "Tclインタプリタエラー"を検出する方法はありますか?たとえば、私は自動的に次のメッセージをいくつかのファイルに保存したいと思います。"Tclインタプリタエラー"をキャッチ
答えて
Tclによってスローされたあらゆる種類のエラーをトラップするcoreコマンドはcatch
です。少なくとも1つの引数、評価するスクリプトを取り、そのスクリプトを評価する結果コードを返します。結果コードは、エラーが発生した場合は1
、エラーが発生しなかった場合は0
、それ以外の場合は他のタイプのものが多数含まれています(通常はエラー以外の例外を示します)。 catch
には、スクリプトまたはのエラーメッセージを評価した結果を書き込む変数の名前を指定するオプションの引数もあります。グローバル変数errorInfo
には、エラーの場合にスタックトレースが含まれます(8.5以降では、さらに変数名がcatch
に渡されたインタプリタ状態辞書を取得できます)。トラップする
いくつかのスクリプト「foo.tcl」でのエラー、あなたはこのようなコードを使用します。
if {[catch {source foo.tcl} msg]} {
puts "I got an error: $msg"
puts "The stack trace was this:\n$errorInfo"
}
それはあなたがしたい場合は、ファイルにそれを書くためにどのように動作するようにあなた次第です。 (私は慎重にテストされたエラートラップを実装し、実際の作業を行う内部スクリプトをロードする外側のスクリプトでこのテクニックを使用しますが、それはうまくいくと思います。 ; Tclはすべてエラートラップ可能にする必要があり、すり抜け非常にいくつかの条件があります)
イベント中に発生したエラーを処理するために呼び出され、エラーが報告されることができることを他のルートbgerror
経由での、。処理。それはあなた自身のバージョンを書くことができる手続きです。呼び出されたときには、エラーメッセージであり、呼び出されたときにグローバルerrorInfo
が正しく設定されているだろうという単一の引数が与えられます。
proc bgerror {msg} {
global errorInfo
puts "I got an error in an event: $msg"
puts "The stack trace was this:\n$errorInfo"
}
定義さbgerror
のない実装が存在しない場合は、スタックトレースがちょうどに書かれていますstderr
チャネル。 Tkパッケージを使用している場合、bgerror
の実装が提供され、問題を説明するダイアログボックスが表示されます。
bgerrorまたはinterp bgerrorコマンドを試してください。
bgerrorのドキュメントを読むと、簡単な例があります。
- 1. プロシージャ名を表示するTclキャッチ
- 2. TCLキャッチ:キャッチ結果オプションで異なる-codeとレベルのリターンコードがTCL_RETURN
- 3. TCL 8.4.13のTCLバイトコードローダ?
- 4. TCL:\。
- 5. TCL TCL CスレッドとTCLスクリプトスレッドからvwait変数を設定する
- 6. TCL:変数で実行するtclコマンド
- 7. Tclクイックリファレンス
- 8. AC_ARG_ENABLEはTCL
- 9. Tclはキー名
- 10. Tcl - encoding convertfrom ascii
- 11. エッグドロップTCLアップタイムスクリプト
- 12. tclスクリプトのregexp
- 13. Tcl引き数
- 14. TCLキャンバスPixelmap
- 15. ctagsのは、Tcl
- 16. Tcl/Tk GUIアップデート
- 17. TCLのローカルプロシージャ
- 18. のTcl regsubは
- 19. TCL構文エラー
- 20. オブジェクト指向TCL
- 21. Tcl/Tkのグラフルーチン
- 22. TcL - リスト編集
- 23. lcltain in tcl 8.5.9
- 24. Tcl - Tcllib HTTP:geturl
- 25. Tcl/TKストップウォッチタイムトラッカー
- 26. NS2のTCLスクリプトジェネレータ
- 27. Tcl tclshセットアップ
- 28. TCLのASNパーサ
- 29. tcl shell through apache
- 30. Vivado GUIのtclスクリプトに引数を渡す方法tcl console
良い提案。しかし、それは動作しません。 :(私はまだ 'Tcl Interpreter Error:" on1 "を読むことができません:ターミナルにはそのような変数はありませんが、関数にはありません。 – ilya1725