[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Error/stack [Back]  [Original]

Error.prototype.stack - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Error.prototype.stack

Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern untersttzt werden und sich in Zukunft ndern oder entfernt werden knnen. Unter Umstnden kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.

Hinweis: Die stack-Eigenschaft wird de facto von allen groen JavaScript-Engines implementiert, und das JavaScript-Standardkomitee erwgt, sie zu standardisieren. Aufgrund von Implementierungsinkonsistenzen knnen Sie sich nicht auf den genauen Inhalt des Stack-Strings verlassen, aber Sie knnen im Allgemeinen davon ausgehen, dass er existiert und zu Debugging-Zwecken verwendet werden kann.

Die nicht standardisierte stack-Eigenschaft einer Error-Instanz bietet eine Rckverfolgung, welche Funktionen aufgerufen wurden, in welcher Reihenfolge, von welcher Zeile und Datei und mit welchen Argumenten. Der Stack-String geht von den neuesten Aufrufen zu den frheren zurck und fhrt zurck zum ursprnglichen Aufruf im globalen Bereich.

In diesem Artikel

Wert

Ein String.

Da die stack-Eigenschaft nicht standardisiert ist, unterscheiden sich die Implementierungen darin, wo sie installiert ist.

  • In Firefox ist sie eine Accessor-Eigenschaft auf Error.prototype.
  • In Chrome und Safari ist sie eine Dateneigenschaft auf jeder Error-Instanz mit dem Deskriptor:
Eigenschaften von Error.prototype.stack
Schreibbarja
Aufzhlbarnein
Konfigurierbarja

Beschreibung

Jede JavaScript-Engine verwendet ihr eigenes Format fr Stack-Traces, aber sie sind in ihrer Gesamtstruktur ziemlich konsistent. Jede Implementierung verwendet eine separate Zeile im Stack, um jeden Funktionsaufruf darzustellen. Der Aufruf, der direkt den Fehler verursacht hat, steht ganz oben, und der Aufruf, der die gesamte Aufrufkette gestartet hat, steht ganz unten. Nachfolgend einige Beispiele fr Stack-Traces:

js
function foo() {
  bar();
}

function bar() {
  baz();
}

function baz() {
  console.log(new Error().stack);
}

foo();
#### JavaScriptCore
baz@filename.js:10:24
bar@filename.js:6:6
foo@filename.js:2:6
global code@filename.js:13:4

#### SpiderMonkey
baz@filename.js:10:15
bar@filename.js:6:3
foo@filename.js:2:3
@filename.js:13:1

#### V8
Error
    at baz (filename.js:10:15)
    at bar (filename.js:6:3)
    at foo (filename.js:2:3)
    at filename.js:13:1

V8 bietet die nicht standardisierte stack trace API zur Anpassung der Stack-Trace, einschlielich Error.captureStackTrace(), Error.stackTraceLimit, und Error.prepareStackTrace(). Andere Engines untersttzen diese API in unterschiedlichem Ausma.

Verschiedene Engines setzen diesen Wert zu unterschiedlichen Zeiten. Die meisten modernen Engines setzen ihn, wenn das Error-Objekt erstellt wird. Dies bedeutet, dass Sie die vollstndige Aufrufstack-Information innerhalb einer Funktion erhalten knnen, indem Sie Folgendes verwenden:

js
function foo() {
  console.log(new Error().stack);
}

Ohne einen Fehler werfen und dann abfangen zu mssen.

Stack-Frames knnen auch andere Dinge auer expliziten Funktionsaufrufen sein. Beispielsweise beginnen Event-Listener, Timeout-Jobs und Promise-Handler alle ihre eigene Aufrufkette. Quellcode innerhalb von eval() und Function-Konstruktoraufrufen erscheint ebenfalls im Stack:

js
console.log(new Function("return new Error('Function failed')")().stack);
console.log("====");
console.log(eval("new Error('eval failed')").stack);
#### JavaScriptCore
anonymous@
global code@filename.js:1:65
====
eval code@
eval@[native code]
global code@filename.js:3:17

#### SpiderMonkey
anonymous@filename.js line 1 > Function:1:8
@filename.js:1:65

====
@filename.js line 3 > eval:1:1
@filename.js:3:13

#### V8
Error: Function failed
    at eval (eval at <anonymous> (filename.js:1:13), <anonymous>:1:8)
    at filename.js:1:65
====
Error: eval failed
    at eval (eval at <anonymous> (filename.js:3:13), <anonymous>:1:1)
    at filename.js:3:13

In Firefox knnen Sie die //# sourceURL-Direktive verwenden, um eine eval-Quelle zu benennen. Siehe die Firefox Debug eval sources Dokumentation.

Beispiele

Verwendung der stack-Eigenschaft

Das folgende Skript zeigt, wie Sie die stack-Eigenschaft verwenden knnen, um einen Stack-Trace in Ihrem Browserfenster auszugeben. Sie knnen dies verwenden, um die Struktur des Stacks Ihres Browsers zu berprfen.

js
function trace() {
  throw new Error("trace() failed");
}
function b() {
  trace();
}
function a() {
  b(3, 4, "\n\n", undefined, {});
}
try {
  a("first call, first arg");
} catch (e) {
  document.getElementById("output").textContent = e.stack;
}

Spezifikationen

Nicht Teil eines Standards.

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page