2012-02-28 17 views
3

私はJavascriptの負荷を取り、それを自動的に計測する必要があります。具体的には、すべての呼び出しを関数に記録し、その関数が呼び出された引数のリストを提供したいと思います。Javascriptを必要とする:関数呼び出し/ args - ANTLR?

私はPythonでこれを行う方法を半減しています: 're'を使って 'function'キーワードにマッチさせますが、それは非常に原始的です(コメントなどは扱いません)。

私はANTRLのエキスパートではありませんが、これを実行するには既に構築済みのJavascript Parserをいかに簡単に活用できますか? (標準的なjavaに適切なコードを動的に作成して、必要なコードを動的に作成することはできますか?)

BTW:実際にはlog4javascriptでログされます。私はまた、単に「警告」を使うかもしれません - ハードビットが動作するコード・インジェクションを取得している....

だから例えば、私はのようなものをオンにする必要があります。

function foo(bar) { 
... 
} 

へ:

function foo(bar) { 
alert("<scriptname.js>: foo was called with arguments: [bar="+bar+"]"); 
... 
} 
+0

JavaScriptでターゲット関数をラップできない理由を詳しく説明できますか?つまり、関数をメッセージとパラメータを記録し、ターゲット関数を呼び出す別の関数にラップしますか? – Pointy

+0

私はそれを行うことができたと思います(私はライブラリにアクセスするコードにアクセスしています)。しかし、私は実際の作業をより簡単にしているかどうかはわかりません.JSコードの 'ミラー'バージョンを作成するためにはまだjavascriptを解析する必要があります。また、私は、既存のソース内で呼び出す関数をどう扱うべきかもわかりません。私はあなたのアイデアを誤解していない限り、それらの呼び出しが 'ミラー'に 'ルーティングされる'ことを確認する必要があります。 – monojohnny

答えて

4

正規表現は使用しません。コードを確実に計測したい場合は、計測器を挿入するための信頼できるパーサーと信頼できるメカニズムが必要です。

building test coverage tools by instrumenting codeの論文を参照してください。これは、ソースからソースへのプログラム変換を使用して、非常に一般的な方法でコードをインスツルメントする方法を説明します。

私の会社は、このようにしっかりしたテストカバレッジツールを構築しています。

あなたはANTLRでこのようなことをすることができますが、それは非常に不器用です。手続き的に変換を記述してから、構文解析ツリーからソースコードを再生成する必要があります。それはa lot harder than it looksです。

+0

クールな紙!私はそれを読む時間があったらいいのに。 (スキミングの代わりに) –

+0

わずか5〜6ページ。あなたはほとんどそれをスキミングして読むことはできません! –

+0

または私は本当に多くの時間がありません;) –

1

Google's Web Tracing FrameworkでJavaScriptコードを計測できます。それはinstrumenting functionsを提供します。

Violinもあります。これは、JavaScriptアプリケーションをインストールする際の実験です。

あなたの関数が呼び出されたパラメータを知りたいので、私はTheseusを提案することができます。関数の呼び出しと引数を持つ非同期呼び出しツリーを提供します。ここで

はテセウスを使用して引数をキャプチャする方法についての例です。

function foo(bar) { 
    theseus.traceEnter("function-id", "..."); 
    try { 
    // original code 
    } catch (error) { 
    theseus.traceException("function-id", error); 
    } finally { 
    theseus.traceExit("function-id", "..."); 
    } 
} 

はあなたのarguments保存するtraceEntertraceExitに渡されます。 Instrumenting JavaScript in JavaScriptについて詳しく読むことができます。

関連する問題