Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要插入Javascript:函数调用/args-ANTLR?_Javascript_Parsing_Antlr_Inject - Fatal编程技术网

需要插入Javascript:函数调用/args-ANTLR?

需要插入Javascript:函数调用/args-ANTLR?,javascript,parsing,antlr,inject,Javascript,Parsing,Antlr,Inject,我需要加载Javascript并自动插入它:具体地说,我希望记录对函数的每次调用,并提供调用函数的参数列表 我对Python有一种半生不熟的方法:使用“re”匹配“function”关键字——但它实际上非常原始(不处理注释等) 我不是ANTLR方面的专家(与之相去甚远):但我能利用一个已经构建的Javascript解析器来完成这项工作吗?(我们能否“钩住”标准java,在正确的位置动态创建所需的代码?) 顺便说一句:实际的日志记录(可能)将使用log4javascript完成;但我也可能只是使用

我需要加载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", "...");
  }
}