объект исключений Chrome (почти) пуст

#javascript #google-chrome

#javascript #google-chrome

Вопрос:

Я пытаюсь получить полезную информацию из объекта исключения (переданного в «catch»), и он почти пуст в Chrome. Я использовал его раньше и, помимо прочего, смог получить разумную трассировку стека. Это изменение в Chrome, или я делаю что-то не так? Я делаю это:

http://jsfiddle.net/R9Wkg/

 function pr(s) {
    document.body.innerHTML  = s.toString()   "<br>";
}

function test() {
    try {
        var a = b; // err: b not defined
    } catch (ex) {
        pr('==== print exception object =====');
        pr(ex);
        pr('======= typeof exception object =====');
        pr(typeof ex);
        pr('===== members ======');
        for (var i in ex) {
            pr('amp;nbsp;----- '   i   " ------");
            pr(ex[i]);
        }
        console.log(ex);
    }
}

function first() {
    second();
}

function second() {
    test();
}

first();
  

В Chrome это не дает мне ничего, кроме строки «ReferenceError: b не определен», если я выполняю toString() для объекта исключения, но если я пытаюсь просмотреть отдельные элементы объекта, там ничего нет. Примечательно, что нет элемента «stack». Опять же, если посмотреть на консоль, там есть еще что-то (но стек просто «-«)

Ответ №1:

Этот дефис означает, что это средство получения и не выполняется автоматически, поскольку это может иметь побочные эффекты. Однако вы можете регистрировать их отдельно:http://jsfiddle.net/R9Wkg/1 /.

Тот факт, что ошибка не поддается перечислению, зарегистрирован как проблема на сайте проекта V8.

Ответ №2:

Вы можете получить элементы ошибки, используя Object.getOwnPropertyNames(ex) для их перечисления.

 pr('===== members ======');
Object.getOwnPropertyNames(ex).forEach(function(i) {
    pr('amp;nbsp;----- '   i   " ------");
    pr(ex[i]);
});
  

http://jsfiddle.net/gilly3/R9Wkg/3/

Комментарии:

1. @rob — да, я также осознал свою ошибку в отношении стека и исправил ее. 🙂

2. спасибо, что полезно знать, хотя pimvdb решает мою текущую проблему