Javascript eval()例外 - 行号

时间:2010-08-15 19:59:09

标签: javascript exception eval node.js v8

在JavaScript中我有一个var str = ".a long string that contains many lines..." 如果由eval(str);

引起异常

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

有可能吗?

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

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

1)运行:

var javascript_offset;
try {
  undefined_function();
} catch(ex1) {
  javascript_offset = ex1.lineNumber;
}
try {
  YOUR_STRING_WITH_JS
} catch (ex2) {
  var line_that_caused_it = ex2.lineNumber - javascript_offset -2;
  HANDLE_THE_EXCEPTION_HERE
}

答案 2 :(得分: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));
    }
});

答案 3 :(得分:-1)

这可以解决您的问题吗?

try {
    eval(str);
} catch (e) {
    console.log(e.lineNumber)
}
相关问题