fn testFunc =
(
try
(
local var1 = "Text Message"
local var2 = 1234.567
local var3 = var1 + var2
)
catch
(
local ss = StringStream ""
format "Error Message:\n%\n\n" (getCurrentException()) to:ss
append ss "StackTrace:\n"
stack to:ss
format "%\n" (ss as string)
)
)
testFunc()
出力
Error Message:
-- 変換できません : 1234.57 入力: String
StackTrace:
** スレッド データ : スレッドID : 14032
** ------------------------------------------------------
** [スタック レベル : 0]
** イン testFunc(); ファイル名 : C:\Scripts\StackTrace.ms; 位置 : 327; 行番号 : 15
-- ローカル :
-- var3: undefined
-- ss: StringStream:""
-- var1: "Text Message"
-- var2: 1234.57
-- 外部 :
-- owner: undefined
** ------------------------------------------------------
** [スタック レベル : 1]
** 呼び出されました トップレベル
スクリプトファイル内に仕込んで、エラー発生時にユーザーに例外情報を通知して貰ったりっていう機能に利用できますね。
ただ、その場合はスタックトレースにファイルパスが含まれますので、ユーザー名が含まれないように置き換えたり、暗号化したりと工夫が必要かもしれません。
なんにせよ、getCurrentExceptionだけでは全く情報が足りないので、例外通知するならかなり有効ですね。
追記:
ところで、試して無いのでなんとも言えないのですが、暗号化したスクリプトファイルからでもちゃんとスタックトレースを吐いてくれるのでしょうか・・・・。