console.trace()
wyświetla wynik na konsoli.
Chcę otrzymać wyniki jako ciąg znaków i zapisać je do pliku.
Nie definiuję nazw funkcji i nie mogę też uzyskać ich nazw callee.caller.name
.
99
console.trace()
wyświetla wynik na konsoli.
Chcę otrzymać wyniki jako ciąg znaków i zapisać je do pliku.
Nie definiuję nazw funkcji i nie mogę też uzyskać ich nazw callee.caller.name
.
Odpowiedzi:
Nie jestem pewien co do przeglądarki Firefox, ale w wersji 8 / chrome można użyć metody w konstruktorze Error o nazwie
captureStackTrace
. ( Więcej informacji tutaj )Tak więc hacky sposób to:
Normalnie
getStackTrace
znajdowałby się na stosie, gdy zostanie przechwycony. Drugi argument wykluczagetStackTrace
dołączenie go do śladu stosu.źródło
Error().stack
. Chociaż nazwy obiektów i funkcji są tracone w Firefoksie, a nazwa obiektu jest tracona w chrome (tak samo jakError.captureStackTrace
),Error().stack
działa w obu przeglądarkach i daje mi wystarczająco dużo informacji do debugowania.Error.stack jest tym, czego potrzebujesz. Działa w Chrome i Firefox. Na przykład
da w Chrome:
aw przeglądarce Firefox:
źródło
(new Error).stack
To da ślad stosu (jako tablicę ciągów) dla nowoczesnych przeglądarek Chrome, Firefox, Opera i IE10 +
Stosowanie:
Wyklucza ze stosu własne wywołanie, a także tytuł „Błąd” używany przez przeglądarki Chrome i Firefox (ale nie IE).
Nie powinno się zawieszać w starszych przeglądarkach, ale po prostu zwrócić pustą tablicę. Jeśli potrzebujesz bardziej uniwersalnego rozwiązania, spójrz na stacktrace.js . Lista obsługiwanych przeglądarek jest naprawdę imponująca, ale moim zdaniem jest bardzo duża jak na to małe zadanie, do którego jest przeznaczone: 37 KB zminimalizowanego tekstu wraz ze wszystkimi zależnościami.
źródło
Istnieje biblioteka o nazwie stacktrace.js, która umożliwia śledzenie stosu w różnych przeglądarkach. Możesz go użyć po prostu dołączając skrypt i wywołując w dowolnym momencie:
źródło
To tylko niewielkie ulepszenie doskonałego kodu Konstantina. Zmniejsza to trochę koszt rzucania i łapania i po prostu tworzy instancję stosu błędów:
Zwykle chcę mieć określony poziom śledzenia stosu (dla mojego niestandardowego rejestratora), więc jest to również możliwe podczas wywoływania:
źródło
potrzebujesz tylko
var stack = new Error().stack
. to jest uproszczona wersja odpowiedzi @sgouros.Prawdopodobnie nie będzie działać w każdej przeglądarce (działa w Chrome).
źródło