console.trace()
gibt das Ergebnis auf der Konsole aus.
Ich möchte die Ergebnisse als Zeichenfolge abrufen und in einer Datei speichern.
Ich definiere keine Namen für Funktionen und kann auch ihre Namen nicht mit bekommen callee.caller.name
.
98
Antworten:
Ich bin mir bei Firefox nicht sicher, aber in Version 8 / Chrome können Sie eine Methode für den aufgerufenen Fehlerkonstruktor verwenden
captureStackTrace
. ( Mehr Infos hier )Ein hackiger Weg, um es zu bekommen, wäre also:
Normalerweise befindet
getStackTrace
es sich auf dem Stapel, wenn es erfasst wird. Das zweite Argument schließtgetStackTrace
aus, dass es nicht in die Stapelverfolgung aufgenommen wird.quelle
Error().stack
. Obwohl Objekt- und Funktionsnamen in Firefox verloren gehen und Objektnamen in Chrome (wie inError.captureStackTrace
) verloren gehen,Error().stack
funktionieren beide Browser und es gibt mir genügend Informationen zum Debuggen.Error.stack ist das, was Sie brauchen. Es funktioniert in Chrome und Firefox. Beispielsweise
wird in Chrome geben:
und in Firefox:
quelle
(new Error).stack
Dies gibt eine Stapelverfolgung (als Array von Zeichenfolgen) für modernes Chrome, Firefox, Opera und IE10 +
Verwendung:
Es schließt den eigenen Aufruf sowie den Titel "Fehler", der von Chrome und Firefox (aber nicht vom IE) verwendet wird, vom Stapel aus.
Es sollte nicht in älteren Browsern abstürzen, sondern nur ein leeres Array zurückgeben. Wenn Sie eine universellere Lösung benötigen, schauen Sie sich stacktrace.js an . Die Liste der unterstützten Browser ist wirklich beeindruckend, aber meiner Meinung nach ist sie für die kleine Aufgabe, für die sie bestimmt ist, sehr groß: 37 KB minimierter Text einschließlich aller Abhängigkeiten.
quelle
Es gibt eine Bibliothek namens stacktrace.js , mit der Sie browserübergreifende Stack-Traces erhalten. Sie können es einfach verwenden, indem Sie das Skript einfügen und an einem beliebigen Punkt aufrufen:
quelle
Dies ist nur eine geringfügige Verbesserung von Konstantins ausgezeichnetem Code. Es reduziert die Kosten für das Werfen ein wenig und instanziiert nur den Fehlerstapel:
Normalerweise möchte ich eine bestimmte Ebene der Stapelverfolgung (für meinen benutzerdefinierten Logger), daher ist dies auch möglich, wenn Folgendes aufgerufen wird:
quelle
du brauchst nur
var stack = new Error().stack
. Dies ist eine vereinfachte Version von @sgouros Antwort.Funktioniert wahrscheinlich nicht in jedem Browser (funktioniert in Chrome).
quelle