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