Я создаю что-то, что включает в себя javascripts на лету асинхронно, и это работает, но я стремлюсь улучшить обнаружение ошибок (поэтому все ошибки не просто появляются из какой-то строки рядом с вызовом AJAX, который сбрасывает их ,
Если я использую eval для оценки многострочного файла JavaScript, есть ли способ отследить, в какой строке произошла ошибка?
Сохраняя ссылки на переменные, которые мне нужны при включении, у меня нет проблем с определением, в каком файле происходит ошибка. Моя проблема заключается в определении, в какой строке возникает ошибка.
Примере:
try {
eval("var valid_statement = 7; \n invalid_statement())))");
} catch(e) {
var err = new Error();
err.message = 'Error in Evald Script: ' + e.message;
err.lineNumber = ???
throw err;
}
Как я могу сказать, что ошибка произошла во второй строке? В частности, я заинтересован в этом в Firefox.
Я знаю, что объекты ошибок имеют e.stack
в браузерах Mozilla, но вывод, похоже, не учитывает символы новой строки должным образом.
3 ответа
- Номер строки в проверенном сценарии начинается с той, в которой включен
eval
. - У объекта ошибки есть номер строки, на которой он был создан.
Так что-то вроде ...
try {
eval('var valid_statement = 7; \n invalid_statement())))');
} catch(e) {
var err = e.constructor('Error in Evaled Script: ' + e.message);
// +3 because `err` has the line number of the `eval` line plus two.
err.lineNumber = e.lineNumber - err.lineNumber + 3;
throw err;
}
Я не думаю, что вы можете сделать это с помощью eval надежно. Тем не менее, вы можете сделать это вместо eval:
try {
$("<script />").html(scriptSource).appendTo("head").remove();
} catch (e) {
alert(e.lineNumber);
}
Слушатель событий глобальной ошибки перехватит исключение из eval и покажет правильные номера строк (возможно, не во всех браузерах):
window.addEventListener('error', function(e) {
console.log(e.message
, '\n', e.filename, ':', e.lineno, (e.colno ? ':' + e.colno : '')
, e.error && e.error.stack ? '\n' : '', e.error ? e.error.stack : undefined
);
}, false);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.