ExtendScriptでエラーを検出すると、そのスタックトレースを記録できるようにしたいと思います。エラーにはExtendScriptにスタックトレースが含まれていないように見えるので、私はスタックトレースをエラーに追加するという考え方をしています。ExtendScriptでエラーのスタックトレースを取得する
私がスタックトレースを取得するために知っている唯一の方法は$.stack
です。フィールド$.stack
には、そのフィールドにアクセスした時点の現在のスタックトレースが含まれています。
私の最初の試みは、スタックを含む私自身のエラーオブジェクトを作成することでした。 Error
オブジェクトは、それを作成したコードの行とファイル名を取得できる点で非常に特殊です。例えば、
try {
throw new Error("Houston, we have a problem.");
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
}
が印刷されます:
Line: 2
File: ~/Desktop/Source1.jsx
Message: Houston, we have a problem.
を私はそれがこの能力を使用して独自のオブジェクトを作成することはできないと思います。私が得ることができる最も近いがこれです:
印刷しfunction MyError(msg, file, line) {
this.message = msg;
this.fileName = file;
this.line = line;
this.stack = $.stack;
}
try {
throw new MyError("Houston, we have a problem.", $.fileName, $.line);
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
$.writeln("Stack: " + e.stack);
}
:
Line: 9
File: ~/Desktop/Source2.jsx
Message: Houston, we have a problem.
Stack: [Source3.jsx]
MyError("Houston, we have a p"...,"~/Desktop/Source2.js"...,9)
をここでは、私は自分のエラーオブジェクトを作成し、明示的にMyErrorので、(それをラインとファイル名を渡していることがわかりますそれだけでそれを理解することはできません)。また、エラーが生成されたときに現在のスタックも含めました。
私自身のエラーオブジェクトを呼び出すとうまく動作しますが、他のコードが通常のエラーオブジェクトを呼び出すとき、またはエラーが自動的に生成されたとき(たとえば不正なアクセスによって)は機能しません。どのようにエラーが発生してもスタックトレースを取得できるようにしたい。
Error
のコンストラクタを変更したり、Error
のプロトタイプを変更したり、Error
オブジェクトを完全に置き換えたりする方法もあります。私はこれらのアプローチのいずれかを働かせることができませんでした。
もう一つのアイデアは、自分のコードのすべての単一のメソッドにcatchブロックを置き、それがまだない場合は現在のスタックをエラーに追加することです。可能であればこのオプションを避けたいと思います。
私はアイデアがありません。エラーのスタックトレースを取得する方法はありますか?
私は本当に興味を持っています。私の最大の問題は、私がエラーから何も役に立たないjsxbin形式にコンパイルするとすぐです。私はそれからデバッグできるように、起こっているロギングの膨大な量のルートを行ってきました。 –
Personnaly私は$ .writeまたは$ .writeln命令を使用していません。まず最初に開いていなければExtendScript Toolkitを先に持ってくるでしょう。彼らが警告していなければ、それは本当にエンドユーザを混乱させるかもしれません。また、特に実際には内部ループが遅くなることがあります。 ログファイルをディスクに書き込む方が好きです。私は自分のレシピを持っていますが、このライブラリを利用することができます:http://creative-scripts.com/logging-with-a-smile/ – Loic