Javascript eval()例外 - 行号

Dud*_*lul 27 javascript v8 eval exception node.js

在JavaScript中我有一个var str = ".a long string that contains many lines..." 由异常引起的eval(str);

我想抓住它并打印导致异常的行号.(str内部的行...)

可能吗?

编辑作为Alligator项目(http://github.com/mrohad/Alligator)的一部分,我是JavaScript的应用程序服务器,我正在从磁盘读取文件和eval()嵌套到scriplet的任何东西(<??> )

我使用NodeJS(在V8之上)在浏览器外部运行此脚本.

Ste*_*wer 6

尝试将try/catch添加到字符串而不是eval周围:

var code = 'try{\nvar c = thisFuncIsNotDefined();\n}catch(e){alert(e.lineNumber);}';
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串有语法错误也不起作用,因为try/catch甚至无法正确构造以捕获错误! (3认同)

Dud*_*lul 3

我找到了一个效率很低的解决方案,但我只在 debug_mode==1 时使用它,所以它还不错。

我将 eval_str 写入一个文件,“导入该文件,并在 try{}catch{} 中调用它,然后从堆栈跟踪中解析错误行...

在我的具体情况下,代码如下所示:

var errFileContent = "exports.run = "+evalStringAsAFunction+";";
fs.writeFile('/home/vadmin/Alligator/lib/debugging.js', errFileContent, function (err) {
    var debug = require('./debugging');
    try{
         debug.run(args...);
    }
    catch(er){
         log.debug(parseg(er));
    }
});
Run Code Online (Sandbox Code Playgroud)