MaxScriptTip: デバッグ情報を文字列化する

1月 26, 2016
MaxScriptでスタックトレースを出力するにはstack()を使用します。
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だけでは全く情報が足りないので、例外通知するならかなり有効ですね。


追記:
ところで、試して無いのでなんとも言えないのですが、暗号化したスクリプトファイルからでもちゃんとスタックトレースを吐いてくれるのでしょうか・・・・。

Related Articles