如何在Javascript中检查可变数据流?

时间:2017-12-18 15:14:49

标签: javascript parsing abstract-syntax-tree interpreter instrumentation

有没有办法检查哪些变量(和代码行)对Javascript中的值有贡献?例如,如果我将检查此代码中的参数input

let x=5;
let y=x+3;

function a(input) {
  // analyzing input in this scope/context,
  // i would like to see that it is a combination of
  // x from line 1 and a constant '3' from line 2.
  inspectDataFlow(input);
}

a(y);

我想得到一个类似这样的数据结构输出:

input (line 8)
  y (line 2)
    x (line 1)
    "3" (line 2)

目的和目标

我的目标是拥有一个工具,您可以在其中查看/更改Javascript变量的值,它会自动调整值来自的变量。

例如,您可以使用绘制形状的功能。当您在视觉上调整绘制的形状时,颜色,形状位置等的原始变量会相应更新。

有点像这样但是编辑任意代码,即使在用户修改了代码行之后:

http://yining1023.github.io/p5PlayGround/

我想到的另一个想法是想象一个变量是如何组成的:哪一行是它们的组合以及它们如何影响结果。

潜在方法

我正在考虑的一种方法是使用Esprima / Acorn为代码添加检测,然后在运行时调用。仪器将跟踪哪些变量已被调用哪些行(和范围)以及它们如何相互关联,有点像这样:

http://alltom.com/pages/instrumenting-javascript/

我想知道这是否有用,是否有可以用于此的框架?或者,如果必须从头开始做仪器?

相关主题

这可能与数据流分析或使用定义链有关,但我不确定,因为我对编译器知之甚少。

https://en.wikipedia.org/wiki/Use-define_chain

我的第一个想法是,这可以使用像Esprima / Acorn这样的静态分析来完成,但我不确定这是否是正确的方法,或者是否可以使用一些自定义Javascript解释器来完成。

http://tobyho.com/2013/12/02/fun-with-esprima/

0 个答案:

没有答案