2

グローバル変数の値を「ログ」するために、JavaScript コードを計測したいと考えています。たとえば、特定の変数fooが実行中に持っていたすべての値を知りたいとします。ロギングは問題ではありません。

これを実装する最も簡単な方法は何でしょうか? Rhino (Mozilla によって作成された Java での JavaScript 実装) を使用して AST を生成し、このASTを変更することを考えていました。

4

7 に答える 7

1

Rhino / Javaに制限されていない場合、JohnsonRubygemはSpidermonkey/TracemonkeyインタープリターをRubyに統合します。ASTへのアクセスを提供します。私はASTを変更しようとはしていません。それが可能かどうかはわかりません(見たコードの名前から判断すると、可能かもしれません)。

Johnsonの宝石は、githubのjbarnetteのJohnsonリポジトリにあります。(スイッチID; Stackoverflowは、この時点でリンクを挿入することを望んでいません...)最近tracemonkeyサポートを追加しましたが、まだマスターソースに統合されていません。githubにある私の(smparkes)のJohnsonリポジトリにあります。

于 2009-10-16T13:47:21.190 に答える
1

これはあなたが探しているものかもしれません:

http://ejohn.org/blog/javascript-getters-and-setter/

ログをセッターに入れれば、それだけです。もちろん、これが実際にどこで機能するのか、信頼できるコードである必要があるのか​​、それとも Web ページなのか、あるいは何なのかはわかりません。

John Resig のコードに基づいて、次のようなデバッグ コードを追加します。

var placeLoggerInSetter = function(variableName, obj){ //obj may be window
    obj.__defineSetter__(variableName, function(val){
         console.log(val); //log whatever here
         obj[variableName] = val;
    });
}

var something = 0;
placeLoggerInSetter("something", window);
something = 1;
//out goes "1" in the console
something = 2
//out goes "2" in the console

そっちの方が似てる?繰り返しますが、私はそれをテストしておらず、obj[variableName]行はかなり再帰的に見えます...動作するかどうかここで教えてくれますか? :)

また、Firebugでは、

console.dir(obj)

のように文字列に変換する代わりに、そのオブジェクトのすべてのプロパティをコンソールに表示できますlog()。また、プロパティなどを展開します。ハンディ。

于 2009-10-16T13:03:57.737 に答える
0

Rhino の cvshead バージョンを使用して、コードを計測しました。

于 2009-11-05T11:00:41.337 に答える
0

デバッガーを設定できます。ドキュメント準備完了イベントの最初のこととして、コードを段階的に実行するだけです。

..フレドリック

于 2009-10-16T12:45:35.613 に答える
0

Dtrace を使用できます。

http://opensolaris.org/os/project/mozilla-dtrace/

于 2009-10-16T12:35:46.660 に答える
0

Firebug (firefox のプラグイン) にはログ機能があり、コンソールに書き込むことができます。alert("foo"); を使用するよりもはるかに優れています。全てにおいて

ログ ステートメントの例:

console.log("foo="+foo);

詳細については、この投稿を参照してください (より高度な使用法を含む)

于 2009-10-16T11:29:34.077 に答える