Получение трассировки выброшенных исключений
Хотя JavaScript позволяет создавать исключения, получение трассировки стека для пользовательского исключения может быть сложной задачей . В этой статье рассматриваются различные методы получения трассировок стека специально для определенных пользователем исключений.
Свойство stack объекта Error предоставляет простое решение. Создав новый объект Error и получив доступ к его свойству стека, вы можете записать трассировку:
function stackTrace() {
var err = new Error();
return err.stack;
}
Этот подход генерирует трассировку стека, похожую на:
DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44 DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9 .success@http://localhost:49573/:462 x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6 .send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
Этот формат предоставляет вызывающую функцию, URL-адрес и последующие вызывающие функции.
Для современных браузеров доступен более простой метод:
console.trace(); // (MDN Reference)
Эта функция захватывает трассировку стека и отображает ее в консоли.
Альтернативный вариант был предложен в исходной теме:
function stacktrace() {
function st2(f) {
return !f ? [] :
st2(f.caller).concat([f.toString().split('(')[0].substring(9) '(' f.arguments.join(',') ')']);
}
return st2(arguments.callee.caller);
}
Эта функция рекурсивно обходит стек вызовов и создает строку трассировки стека.
Реализуя эти методы, разработчики могут эффективно получать трассировки стека для пользовательских исключений JavaScript, обеспечивая более надежную обработку ошибок и отладку .
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3