объект исключений Chrome (почти) пустой - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь получить полезную информацию из объекта исключения (переданного в "catch"), и он почти пуст в 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('&nbsp;----- ' + i + " ------");
            pr(ex[i]);
        }
        console.log(ex);
    }
}

function first() {
    second();
}

function second() {
    test();
}

first();

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

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

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

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

1 голос
/ 13 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...