需要插入Javascript:函数调用/args-ANTLR
Need to instrument Javascript: function calls / args - ANTLR?
我需要加载Javascript并自动检测它:特别是,我想记录对函数的每次调用,并提供调用函数时使用的参数列表。
我用Python有一种半生不熟的方法:使用"re"来匹配"function"关键字,但它确实非常原始(不处理注释等)。
我不是ANTLR的专家(远非如此):但我能用一个已经构建的Javascript Parser来执行这项工作有多容易?(我们能"挂钩"到标准java,在正确的位置动态创建我需要的代码吗?)
BTW:实际的日志记录将(可能)使用log4javascript完成;但我也可能只是使用"警报"——最困难的是让代码注入工作。。。。
例如,我需要把一些东西变成:
function foo(bar) {
...
}
进入:
function foo(bar) {
alert("<scriptname.js>: foo was called with arguments: [bar="+bar+"]");
...
}
正则表达式做不到。如果你想可靠地插入代码,你需要可靠的解析器和可靠的插入机制。
请参阅我关于通过检测代码构建测试覆盖率工具的论文。它描述了如何以非常通用的方式插入代码,使用源代码到源程序的转换,来做各种事情,比如你想做什么
我的公司通过这种方式构建了一系列强大的测试覆盖工具。
你可以用ANTLR做这种事情,但它要笨拙得多;您已经按程序编写了转换,然后必须从解析树中重新生成源代码。这比看起来要困难得多。
您可以使用Google的Web跟踪框架来插入JavaScript代码。它提供了检测功能。
还有Violin,它是一个测试JavaScript应用程序的实验。
如果你想知道调用函数的参数,我可以向你推荐忒修斯。它提供了一个带有函数调用和参数的异步调用树。
下面是一个关于如何用忒修斯来捕捉你的论点的例子:
function foo(bar) {
theseus.traceEnter("function-id", "...");
try {
// original code
} catch (error) {
theseus.traceException("function-id", error);
} finally {
theseus.traceExit("function-id", "...");
}
}
您的参数将被传递到要保存的traceEnter
和traceExit
中。您可以在JavaScript中的Instrumenting JavaScript上阅读更多关于它的信息。
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 需要插入Javascript:函数调用/args-ANTLR