2012-11-20 10 views
8

Haben Sie Vorschläge, wie Sie im Browser eine Stack-Ablaufverfolgung in JavaScript generieren können?Wie Javascript stacktrace generieren?

Neuere Browser, Chrome und Firefox, geben ein Konsolenobjekt aus, mit dem Stack-Traces generiert werden können. Diese Methode bietet keine Methode zum Speichern des Stack-Trace in einer Variablen.

https://github.com/eriwen/javascript-stacktrace Funktioniert ganz gut, aber es macht separate Ajax-Anforderungen zum Laden von Skriptdateien als Teil der Ablaufverfolgung enthalten. Dies scheint eine gängige Methode in Trace-Bibliotheken zu sein. Ich vermute, dass Browser nicht genügend Informationen zur Verfügung stellen, um eine sinnvolle Stack-Trace zu generieren (Zeilennummern, Funktionsnamen, Dateinamen, Argumente, etc.).

+0

Sie sind richtig, dass IE9- (seien wir ehrlich, die wahrscheinlich das, was wir sind Probleme mit hier) gibt nicht viele nützliche Informationen. Man könnte die Datei- und Zeilennummer von 'window.onerror' erhalten, außer dass nur ein Teil der Zeit ausgelöst wird und die Zeilennummer manchmal falsch ist. –

+0

Ja, wie immer ist IE das Problemkind. Ich stehe bei der Unterstützung von IE7, für die die Zeilennummer und die Funktionsnameninformationen des Onerror-Ereignisses schrecklich sind. Es kann immer noch nützlich sein; Ich benutze es um Protokolle für nicht erfasste Fehler zu schreiben. – Kyle

Antwort

1

Erstellen Sie ein Fehlerobjekt und überprüfen Sie es für ein Stapelelement. Angepasst von Code Overtones:

var e = new Error('dummy'); 
var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '') // remove lines without '(' 
    .replace(/^\s+at\s+/gm, '') // remove prefix text ' at ' 
    .split('\n'); 
console.log(stack); 

Error.stack in Mozilla's reference documentation dokumentiert.

0

Airbrake provides a JavaScript library for logging stacktraces zu Ihrem Airbrake-Konto oder Errbit-Server.

Ich bekomme keine Stack-Spuren in IE, und andere können nicht perfekt sein, aber es sieht definitiv so aus, als ob es in der Linie von dem ist, wonach Sie suchen.

+0

Danke. Ich habe bereits ein Framework, das auf meinem Server loggen kann. Es ist im Grunde log4j in Javascript. Der Stack-Trace-Generierungscode in dem von Ihnen bereitgestellten Link sieht aus, als wäre er aus dem Projekt in meiner Frage entlehnt. Ich suche nach anderen Bibliotheken für die Stack-Trace-Generierung. Das verwendete Protokollierungs-Framework sollte separat sein. – Kyle