2013-10-11 6 views
6

I wprowadziły rejestrowanie wyjątek po stronie klienta przy użyciu window.onerror, gdzie mogę pobrać bieżący błędu i ślad stosu i przesyła je do serwera przy użyciu AJAXCzy mapy źródłowe JavaScript działają podczas łapania błędów?

window.onerror = function(message, url, line) { 

     var stackTrace = printStackTrace(); //get stack trace 

     //send message, url, line and stackTrace to the server using an ajax call 
    } 

gdzie printStackTrace jest funkcją świadczone przez biblioteki: http://stacktracejs.com/

Problem polega na tym, że w produkcji wszystkie pliki JavaScript są zminimalizowane, więc śledzenie stosu i numer linii nie są naprawdę pomocne, ponieważ wszystkie błędy są zgłaszane na Linii 1 w pliku, co jest normalne, ponieważ wersja minified zawiera pojedynczą linię kodu. Na przykład:

Message: Object doesn't support property or method 'indexOf' 
URL: http://[server]/[site]/content/combined/combined.635EE367354E6DF721593CAC56FECF95.min.js 
Line: 1 

Może to zostać poprawione za pomocą mapy źródłowe lub nie, że tylko wtedy, gdy praca Developer Tools jest aktywny?

Chciałbym uzyskać pełne śledzenie stosu przy użyciu map źródłowych (lub przynajmniej rzeczywistego numeru linii), gdy wystąpi błąd dla użytkownika, który nie ma aktywowanych narzędzi programistycznych/włączonych map źródłowych. Czy to w ogóle możliwe?

+0

Potrzebujesz rozwiązania dla tego samego problemu. Jak długo jesteś teraz na tym? – IsmailS

+0

@iSid nie znalazłem rozwiązania. wygląda na to, że nie jest to możliwe, dopóki przeglądarki go nie zaimplementują. nie wiem więcej informacji niż to, co jest napisane w odpowiedzi. przepraszam – SzilardD

+0

@iSid to pytanie wydaje się mieć więcej rozwiązań: http://stackoverflow.com/questions/19420604/angularjs-stack-trace-ignoring-source-map – xmojmr

Odpowiedz

4

Możesz na pewno uzyskać wszystkie informacje zawarte na mapach źródłowych i samodzielnie opracować ślad stosu, ale AFAIK nie ma jeszcze na to eleganckiego rozwiązania. Tak czy inaczej, wymagałoby to przynajmniej obniżenia pliku mapy o minimum i prawdopodobnie pliku źródłowego. Będziesz mieć kilka trudnych problemów z przeglądarką, ponieważ nie wszystkie przeglądarki jeszcze obsługują mapy źródłowe.

Wygląda jak ślad stosu ma to w planie, ale nie ma nikogo wykonywania na nim jeszcze: https://github.com/eriwen/javascript-stacktrace/issues/44

Pobierz Sentry ma zrobić to jako część ich js logujących użyteczność ale jest owinięty wewnątrz więcej uniwersalnego narzędzia i uważam, że obsługuje on tylko rejestrowanie danych śledzenia stosu w Chrome na teraz: https://github.com/getsentry/raven-js