27

JavaScript ではvar str = ".a long string that contains many lines..." 、例外が発生した場合に発生する例外があります。eval(str);

私はそれをキャッチして、例外の原因となった行番号を出力したいと思っていました。(str.. の内部行)

出来ますか?

編集Alligator プロジェクト ( http://github.com/mrohad/Alligator ) の一部として、JavaScript のアプリケーション サーバーとして、ディスクからファイルを読み込んでおり、スクリプトレットにネストされているものはすべて eval() しています ( < ? ? > )

NodeJS (V8 の上) を使用して、ブラウザーの外部でこのスクリプトを実行しています。

4

4 に答える 4

5

eval の代わりに文字列に try/catch を追加してみてください。

var code = 'try{\nvar c = thisFuncIsNotDefined();\n}catch(e){alert(e.lineNumber);}';
于 2010-08-15T20:53:04.107 に答える
3

1) 実行:

var javascript_offset;
試す {
  undefined_function();
}キャッチ(ex1){
  javascript_offset = ex1.lineNumber;
}
試す {
  YOUR_STRING_WITH_JS
}キャッチ(例2){
  var line_that_caused_it = ex2.lineNumber - javascript_offset -2;
  HANDLE_THE_EXCEPTION_HERE
}
于 2010-08-15T20:21:16.597 に答える
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));
    }
});
于 2010-08-15T21:07:42.443 に答える
-1

これで問題は解決しますか?

try {
    eval(str);
} catch (e) {
    console.log(e.lineNumber)
}
于 2010-08-15T20:19:45.453 に答える