Регистрация исключений в JavaScript, отслеживание стека перехвата
Я использовал https://github.com/eriwen/javascript-stacktrace для захвата трассировки стека, когда происходит исключение.
В некоторых случаях регистрируемая информация выглядит очень странно, например, пользователь использует IE9, а зарегистрированное сообщение at {anonymous}()
 at printStackTrace()
 at {anonymous}(#object,"error","")
 at {anonymous}(#object,[#object...""])
 at d(12031,"",#object,"")
 at {anonymous}()
,
В моем коде у меня есть довольно много кода обработки событий jQuery
$(document).ready(function () {
$('#reset').bind('click', reset);
}
function reset(e){
$.ajax({
type: 'POST',
url: '/my/url',
dataType: "json",
success: function (result) {
// do something useful
},
error: function (request, error) {
// log to server side.
logError(error, printStackTrace());
}
});
}
Я думаю, что в этом случае трассировка захваченного стека выглядит как анонимные объекты.
Есть ли лучший способ, чтобы я мог захватить трассировку стека более читабельным способом?
3 ответа
Я думаю, что знаю причину, согласно http://kangax.github.com/nfe/ function expressions is the only way to get a truly robust stack inspection
,
Поэтому в кодировании мы должны рассмотреть, как создать функцию, чтобы позволить отладчику захватывать имя.
Каждая функция в Javascript имела свойство вызывающей стороны, но из-за ограничений безопасности вы не можете больше на это рассчитывать.
Даже если бы вы могли, вы ничего не можете сделать с анонимными функциями, поскольку у них просто нет имени. Вы можете взять строку с трассировкой стека и сделать ее немного красивее:
function prettyTrace(stackTrace) {
if (!stackTrace || stackTrace === "")
return "";
return stackTrace.replace(/\&[^;]+\;/, "");
}
Как насчет попробовать поймать блок взглянуть на ссылку
<script>
var txt="";
function message()
{
try
{
adddlert("Welcome guest!");
}
catch(err)
{
txt="There was an error on this page.\n\n";
txt+="Error description: " + err.message + "\n\n";
txt+="Click OK to continue.\n\n";
alert(txt);
}
}
</script>