Javascript eval() Исключение - номер строки
В JavaScript у меня есть var str = ".a long string that contains many lines..."
В случае исключения, вызванного eval(str);
Мне понравилось поймать его и напечатать номер строки, вызвавший исключение. (внутренняя строка для str..)
Возможно ли это?
EDIT Как часть проекта Alligator (http://github.com/mrohad/Alligator), сервер приложений для JavaScript, я чтение файлов с диска и eval() все, что вложено в scriplet (<? > )
Я запускаю этот script за пределами браузера, используя NodeJS (поверх V8).
Ответы
Ответ 1
Я нашел решение, которое довольно неэффективно, но я использую его только при 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));
}
});
Ответ 2
Попробуйте добавить try/catch к строке вместо eval:
var code = 'try{\nvar c = thisFuncIsNotDefined();\n}catch(e){alert(e.lineNumber);}';
Ответ 3
1) Run:
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
}
Ответ 4
Это решает вашу проблему?
try {
eval(str);
} catch (e) {
console.log(e.lineNumber)
}