Javascript 基于Web的JS调试库

Javascript 基于Web的JS调试库,javascript,node.js,parsing,interpreter,javascript-debugger,Javascript,Node.js,Parsing,Interpreter,Javascript Debugger,我正在尝试制作一个基于webJavascript的JS解释器和调试器,用于教程目的。我正在nodejs服务器上运行该程序。解释器部分只需在child_process.exec上运行命令节点file.js即可 有人能提出一种实现调试器的好方法吗?如果用户设置了断点,程序将运行到该点,并将显示在该执行点之前已经声明或更改的变量值 我尝试使用uglify js模块来实现这一点。我运行UglifyJS.minify[,{options}]来提取代码中使用的变量,并在控制台中回显它们 我已经为此编写了以下

我正在尝试制作一个基于webJavascript的JS解释器和调试器,用于教程目的。我正在nodejs服务器上运行该程序。解释器部分只需在child_process.exec上运行命令节点file.js即可

有人能提出一种实现调试器的好方法吗?如果用户设置了断点,程序将运行到该点,并将显示在该执行点之前已经声明或更改的变量值

我尝试使用uglify js模块来实现这一点。我运行UglifyJS.minify[,{options}]来提取代码中使用的变量,并在控制台中回显它们

我已经为此编写了以下代码,但我正在寻找一些可用的开源解决方案。有人知道有任何图书馆可用于此目的吗

文件:parser.js

var UglifyJS = require("uglify-js");
var exec = require('child_process').exec;
var fs = require('fs');

var allcode = new Object();
allcode.code = "";
allcode.vars = "";
var output = new Object();
output.data = "";
//THE BREAKPOINT MENTIONED BY USER
var tillLine = 3;
var i = 0;
var done = 0;
var filesuffix = "temp301";
var fileout = "output.log";
var child = Array();
var notAllowed = Array("console","log","eval");
fs.writeFileSync("./"+fileout, "");

fs.readFileSync('./demo.js').toString().split('\n').every(function (line) { 
    allcode.code += line + "\n";
    output.data[i] = "";
    allcode.vars = "";

    fs.writeFileSync("./"+filesuffix+".js", allcode.code);

    i++;
    //ADD CODE ONLY UPTO THE MENTIONED LINE
    if(i>tillLine)
    {
        return false;
    }
    else
    {
        return true;
    }
});
//GET THE LIST OF USED VARIABLES
    var minified = UglifyJS.minify("./"+filesuffix+".js",{outSourceMap: "out.js.map"});
    var map = JSON.parse(minified.map);
    map.names.forEach(function(variable){
        if(notAllowed.indexOf(variable) == -1)
        {
            allcode.vars += "console.log('Value of "+variable+" is ' + "+variable+");\n";
        }
    });
    fs.appendFileSync("./"+filesuffix+".js", allcode.vars);
//EXECUTE THE DEBUGGING CODE
child = exec("nodejs " + "./"+filesuffix+".js");
done = 1;
child.stdout.on('data', function(data) {
    output.data += data;
});
child.stderr.on('data', function(data) {
    output.err += data;
});
child.on('close', function(code) {
    fs.writeFileSync("./"+fileout, JSON.stringify(output,null,'\t'));

    console.log(output.data);
    done = 0;

});
文件:demo.js

输出:


在我的脑海中,我会尝试在预期调试操作的位置在用户代码中插入函数调用。 该函数将枚举并打印本地上下文变量以及任何其他有用的信息。 为了不修改下面的行号,我会尝试将插入的代码附加在所选的分号后面

var x = 9;
var a = "The sum is ";
var y = 10;
var z = y*y + x;
console.log(a + z);
admin@tomcat-PC:~/Desktop/node_app$ nodejs parser.js 
Value of x is 9
Value of a is The sum is 
Value of y is 10
Value of z is 109