2011-10-18 11 views
6

Wywołuję funkcję z konsoli, ale kiedy zgłasza wyjątek, nie otrzymuję śledzenia stosu, tak jakbym zrobił to, gdyby kod został wykonany normalnie.Uzyskiwanie śledzenia stosu w przypadku błędu podczas uruchamiania kodu z konsoli w przeglądarce Chrome

Czy istnieje sposób, w jaki mogę zmodyfikować moje polecenie (być może z try/catch), aby dostarczył mi tę informację?

wyjaśnienie:

page.js:

function otherStuff() { return ['a','b',undefined,'c']; 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

konsoli po załadowaniu strony HTML, który łączy page.js

> otherStuff(); 

mam żadnego numeru wiersza od Błąd, który został mi zwrócony. Po uruchomieniu go ze strony (zamiast konsoli) otrzymam numer linii i ślad stosu.

+0

jakie jest polecenie? jaka wersja chrome? (jakie jest panieńskie nazwisko twojej matki?) – Neal

+0

Zobacz aktualizację mojej odpowiedzi. – Neal

Odpowiedz

11

Chociaż gadatliwy, to będzie wydrukować ślad stosu interaktywnego błędu w konsoli Chrome JS:

try { 
    throw new Error(); 
} catch (e) { 
    console.error(e.stack); 
} 

Niestety to nie będzie działać, jeśli nie- Error obiekt jest wyrzucane.

+0

Działa to całkiem dobrze. Dane są sformatowane inaczej, ale wszystkie (najważniejszy jest dla mnie numer linii). Jeśli zostanie zgłoszony obiekt inny niż "Błąd", informacja o moim stosie zostanie mi utracona, prawda? Ponieważ pobieramy go z obiektu 'Błąd' w tym przypadku –

+0

Tak, to samo dla dowolnego niestandardowego obiektu błędu, który nie jest oparty na standardowych obiektach błędów JS. Próbowałem ustawić punkt przerwania w klauzuli "catch", gdy "wyrzucam ciąg znaków", próbując sprawdzić, czy Chrome tworzy jakiś właściwy obiekt wyjątku, którego można użyć wewnętrznie - nie ma takiego szczęścia, obawiam się. – millimoose

+1

Uwaga: MobileSafari nie wydaje się dostarczać własności "stack" do swoich błędów. –

2

Wystąpił błąd w kodzie.

Brakuje klamrę zamykającą:

function otherStuff() { return ['a','b',undefined,'c']; //} where am i? 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

punkt niepożądane:

parseInt(undefined) robi nie rzucać błąd. Przykład: http://jsfiddle.net/maniator/Zequj/2/

+0

Poprawnie we wszystkich sprawach oczywiście był to zły przykład. –

Powiązane problemy