需要插入Javascript:函数调用/args-ANTLR?
我需要加载Javascript并自动插入它:具体地说,我希望记录对函数的每次调用,并提供调用函数的参数列表 我对Python有一种半生不熟的方法:使用“re”匹配“function”关键字——但它实际上非常原始(不处理注释等) 我不是ANTLR方面的专家(与之相去甚远):但我能利用一个已经构建的Javascript解析器来完成这项工作吗?(我们能否“钩住”标准java,在正确的位置动态创建所需的代码?) 顺便说一句:实际的日志记录(可能)将使用log4javascript完成;但我也可能只是使用“警报”——最难的是让代码注入工作 举个例子,我需要像这样转变:需要插入Javascript:函数调用/args-ANTLR?,javascript,parsing,antlr,inject,Javascript,Parsing,Antlr,Inject,我需要加载Javascript并自动插入它:具体地说,我希望记录对函数的每次调用,并提供调用函数的参数列表 我对Python有一种半生不熟的方法:使用“re”匹配“function”关键字——但它实际上非常原始(不处理注释等) 我不是ANTLR方面的专家(与之相去甚远):但我能利用一个已经构建的Javascript解析器来完成这项工作吗?(我们能否“钩住”标准java,在正确的位置动态创建所需的代码?) 顺便说一句:实际的日志记录(可能)将使用log4javascript完成;但我也可能只是使用
function foo(bar) {
...
}
进入:
函数foo(bar){
警报(“:foo是用参数:[bar=“+bar+”]”调用的;
...
}
正则表达式无法做到这一点。如果希望可靠地插入代码,则需要可靠的解析器和可靠的机制来插入插入代码
请看我的论文。它描述了如何以非常通用的方式插入代码,使用源代码到源代码的程序转换,来完成诸如您想做的事情之类的事情
我的公司以这种方式构建了一系列健壮的测试覆盖工具
你可以用ANTLR做这种事情,但它要笨拙得多;您必须按程序编写转换,然后必须从解析树中重新生成源代码。也就是说。您可以在JavaScript代码中插入指令。它提供了 还有,这是一个测试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包装目标函数的原因?也就是说,将函数包装到另一个函数中,该函数记录消息和参数,然后调用目标函数?我想我可以这样做(我可以访问调用库的代码);但我不确定这是否会使任务在实践中变得更容易——我仍然需要解析javascript来创建js代码的“镜像”版本,我想是这样吗?另外,我不知道如何处理在现有源中调用的函数;除非我误解了你的想法,否则我必须确保这些电话被“转接”到“镜子”上!但愿我有时间读它。(而不是略读)它只有5或6页;你很难浏览它而不阅读它!或者我真的没有多少时间;)
function foo(bar) {
theseus.traceEnter("function-id", "...");
try {
// original code
} catch (error) {
theseus.traceException("function-id", error);
} finally {
theseus.traceExit("function-id", "...");
}
}