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