11

Kiedy wyjątek JavaScript jest zgłaszany w IE 8, jak mogę zobaczyć jego ślad stosu?Jak mogę uzyskać śledzenie stosu dla wyjątku JavaScript w IE 8?

Na przykład następujący kod z jQuery łapie wyjątek i ponownie go rzuca. Debugowanie w Visual Studio (2012), przerwy w realizacji jako wyjątek („E”) zostaje złapany przez jQuery, ale nie mogę dla życia mnie zobaczyć ślad stosu, gdzie wyjątek pochodzi z:

// resolve with given context and args 
resolveWith: function(context, args) { 
    if (!cancelled && !fired && !firing) { 
     firing = 1; 
     try { 
      while(callbacks[ 0 ]) { 
       callbacks.shift().apply(context, args); 
      } 
     } 
     // We have to add a catch block for 
     // IE prior to 8 or else the finally 
     // block will never get executed 
     catch (e) { 
      throw e; 
     } 
     finally { 
      fired = [ context, args ]; 
      firing = 0; 
     } 
    } 
    return this; 
} 

Próbowałem już biblioteki stacktrace.js, ale wydaje się zignorować wyjątek, gdy przeglądarka jest IE 8, po prostu spada do produkcji stosu bieżącego klatki.

EDIT:

Jak widać na poniższym zrzucie ekranu, wyjątek nie ma właściwości odnoszące się do stosu:

JavaScript exception object

+2

Nie możesz umieścić punktu przerwania w bloku 'catch' i przeanalizować obiekt błędu * przed * ponownym zgłoszeniem? –

+0

@ ŠimeVidas Obiekt Error nie ma śledzenia stosu, widzisz. Ma wiadomość i numer, ale bez śladu. – aknuds1

+0

W programie Internet Explorer * Błąd * obiekty mają właściwość '.stack': http://jsfiddle.net/2HDBf/ (W gruncie rzeczy ta właściwość jest przeglądarką). –

Odpowiedz

Powiązane problemy