4

Javascriptをロードして自動的にインストルメント化する必要があります。具体的には、関数へのすべての呼び出しをログに記録し、関数が呼び出された引数のリストを提供します。

私はPythonでこれを行う中途半端な方法を持っています:「re」を使用して「function」キーワードに一致させます-しかし、それは本当に非常に原始的です(コメントなどを扱いません)。

私はANTLRの専門家ではありません(それからはほど遠いです):しかし、これを実行するために、すでに構築されたJavascriptパーサーをどれほど簡単に活用できますか?(標準のJavaに「フック」して、必要なコードを適切な場所で動的に作成できますか?)

ところで:実際のロギングは(おそらく)log4javascriptで行われます。しかし、「アラート」を使用することもできます。難しいのは、コードインジェクションを機能させることです。

したがって、たとえば、次のようにする必要があります。

function foo(bar) {
...
}

の中へ:

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

2 に答える 2

5

正規表現はそれを行いません。コードを確実にインストルメント化する場合は、インストルメンテーションを挿入するための信頼できるパーサーと信頼できるメカニズムが必要です。

コードをインストルメント化してテストカバレッジツールを構築する方法についての私の論文を参照してください。非常に一般的な方法で、ソースからソースへのプログラム変換を使用して、実行したいことなどの種類のことを実行する方法を説明します。

私の会社は、この方法で一連の堅牢なテストカバレッジツールを構築しています。

ANTLRでこの種のことを行うことができますが、それはかなり不器用です。変換を手続き的に記述してから、解析ツリーからソースコードを再生成する必要があります。それは見た目よりもずっと難しいです

于 2012-02-28T17:54:49.390 に答える
3

JavaScriptコードをGoogleのWebTracingFrameworkでインストルメント化できます。計測機能を提供します。

JavaScriptアプリケーションをインストルメント化する実験であるViolinもあります。

関数が呼び出されたパラメーターを知りたいので、テセウスを提案することができます。これは、関数の呼び出しと引数を備えた非同期呼び出しツリーを提供します。

テセウスで議論を捉える方法の例を次に示します。

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

あなたの引数は渡されtraceEntertraceExit保存されます。詳細については、JavaScriptでのJavaScriptのインストルメンテーションを参照してください。

于 2016-05-25T12:37:02.903 に答える