代码之家  ›  专栏  ›  技术社区  ›  DuduAlul

javascript eval()异常-行号

  •  27
  • DuduAlul  · 技术社区  · 16 年前

    在javascript中,我有一个 var str = ".a long string that contains many lines..." 如果由以下原因引起的异常 eval(str);

    我想捕捉它并打印导致异常的行号。(位于str.内部的行。)

    有可能吗?

    编辑 作为鳄鱼项目的一部分( http://github.com/mrohad/Alligator )是一个用于javascript的应用服务器,我正在从磁盘和eval()中读取文件嵌套到sciplet(<??&)

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

    4 回复  |  直到 8 年前
        1
  •  6
  •   Steve Brewer    16 年前

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

    var code = 'try{\nvar c = thisFuncIsNotDefined();\n}catch(e){alert(e.lineNumber);}';
    
        2
  •  3
  •   AndreyKo DaveE    16 年前

    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
    }
    
        3
  •  3
  •   DuduAlul    16 年前

    我找到了一个效率非常低的解决方案,但是我只在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));
        }
    });
    
        4
  •  -1
  •   Topera    16 年前

    这解决了你的问题?

    try {
        eval(str);
    } catch (e) {
        console.log(e.lineNumber)
    }
    
    推荐文章