私は1つのcatch
ブロックに複数のプロシージャコールがあるとします。プロシージャ名を表示するTclキャッチ
catch {
proc1
proc2
proc3
} errMsg
例外をスローしたプロシージャのうち、キャッチしたものを表示する方法はありますか?
私は1つのcatch
ブロックに複数のプロシージャコールがあるとします。プロシージャ名を表示するTclキャッチ
catch {
proc1
proc2
proc3
} errMsg
例外をスローしたプロシージャのうち、キャッチしたものを表示する方法はありますか?
グローバル変数errorInfo
を見ると、必要な情報を含むスタックトレースが表示されます。また、errMsg
の後にcatch
コールに余分な可変引数を追加すると、その情報にエラー情報のトレースと他のもの(コンピュータが読み取り可能な例外コードなど)が含まれる辞書が書き込まれます。
[EDIT]:Tclの8.6では、例外オプション辞書が呼び出されている内容の説明が含まれている要素-errorstack
を持っています。ここではこのことを示し、対話型セッションです:
% proc foo {x} {error $x}
% proc bar c {catch {puts a;foo $c} a b;return $b}
% bar d
a
-code 1 -level 0 -errorstack {INNER {returnImm d {}} CALL {foo d} CALL {bar d}} -errorcode NONE -errorinfo {d
while executing
"error $x"
(procedure "foo" line 1)
invoked from within
"foo $c"} -errorline 1
エラー・スタックは、様々な事柄のための要素のペアを持っていますが、重要なものは、各ペアの2番目の要素はなかった引数のリストですCALL
タイプのもの、あります実際に電話をかけるために使用されます。これを使って名前を得ることは可能かもしれません。 (INNER
タイプは、Tclバイトコードエンジンの実行状態を参照しています。他のタイプがあるかどうかはわかりません)
'errMsg'の後に余分な変数を追加しようとしました。 '-errorinfo'キーの下にプロシージャ名をキャッチしますが、エラーメッセージ文字列の一部です。つまり、文字列を解析して名前を取得する必要があります。私はそれを得るためのよりクリーンな方法があると思った。 –
@ Mr.SrJenea _Perhaps_あります。 8.6のエラースタック情報が役立つかもしれません。またはそうでないかもしれません;私はリストのどこに見えるかを決めるのにそれを解析する最善の方法が何であるか全く分かりません。 –
私の要件はバージョン8.5に制限されています。私は複数の 'catch'ブロックを持つか、' regexp'を使ってプロシージャ名を抽出するかのいずれかになります。ありがとう –