Javascript eval()exception – 行号

在JavaScript中,我有一个var str = ".a long string that contains many lines..."在由eval(str);引起的exception的情况下eval(str);

我想赶上它,并打印导致exception的行号。 (str的内部线..)

可能吗?

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

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

尝试添加try / catch到string而不是在eval周围:

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

1)运行:

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

我发现了一个相当低效的解决scheme,但是我只在debug_mode == 1的时候使用它,所以没有那么糟糕。

我写eval_str到一个文件中,我“导入该文件,并在一个try {} catch {}中调用它,我从堆栈跟踪parsing错误行…

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

 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)); } }); 

这解决了你的问题?

 try { eval(str); } catch (e) { console.log(e.lineNumber) }