Регистрация исключений в 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>

http://www.w3schools.com/js/js_errors.asp

Другие вопросы по тегам