660 Stimmen

Wie kann ich einen JavaScript-Stack-Trace erhalten, wenn ich eine Ausnahme auslöse?

Wenn ich selbst eine JavaScript-Ausnahme auslöse (z. B., throw "AArrggg" ), wie kann ich den Stack-Trace (in Firebug oder anders) erhalten? Im Moment bekomme ich nur die Meldung.

bearbeiten : Wie viele der unten genannten Personen gepostet haben, ist es möglich, einen Stack-Trace für eine JavaScript-Ausnahme aber ich möchte einen Stack-Trace für meine Ausnahmen. Zum Beispiel:

function foo() {
    bar(2);
}
function bar(n) {
    if (n < 2)
        throw "Oh no! 'n' is too small!"
    bar(n-1);
}

Wenn foo aufgerufen wird, möchte ich eine Stapelverfolgung erhalten, die die Aufrufe an foo , bar , bar .

6voto

Miller Medeiros Punkte 1246

Eine Möglichkeit, einen echten Stack-Trace in Firebug zu erhalten, ist, einen echten Fehler wie den Aufruf einer undefinierten Funktion zu erstellen:

function foo(b){
  if (typeof b !== 'string'){
    // undefined Error type to get the call stack
    throw new ChuckNorrisError("Chuck Norris catches you.");
  }
}

function bar(a){
  foo(a);
}

foo(123);

Oder verwenden Sie console.error() gefolgt von einer throw Anweisung seit console.error() zeigt den Stack-Trace.

5voto

Petr Varyagin Punkte 249

Dieser Polyfill-Code funktioniert in modernen (2017) Browsern (IE11, Opera, Chrome, FireFox, Yandex):

printStackTrace: function () {
    var err = new Error();
    var stack = err.stack || /*old opera*/ err.stacktrace || ( /*IE11*/ console.trace ? console.trace() : "no stack info");
    return stack;
}

Andere Antworten:

function stackTrace() {
  var err = new Error();
  return err.stack;
}

funktioniert nicht im IE 11 !

使用方法 arguments.callee.caller - funktioniert im Strict-Modus in keinem Browser!

3voto

Rabih Kodeih Punkte 9008

In Google Chrome (Version 19.0 und höher) funktioniert das Auslösen einer Ausnahme perfekt. Zum Beispiel:

/* file: code.js, line numbers shown */

188: function fa() {
189:    console.log('executing fa...');
190:    fb();
191: }
192:
193: function fb() {
194:    console.log('executing fb...');
195:    fc()
196: }
197:
198: function fc() {
199:    console.log('executing fc...');
200:    throw 'error in fc...'
201: }
202:
203: fa();

zeigt den Stack-Trace in der Konsolenausgabe des Browsers an:

executing fa...                         code.js:189
executing fb...                         code.js:194
executing fc...                         cdoe.js:199
/* this is your stack trace */
Uncaught error in fc...                 code.js:200
    fc                                  code.js:200
    fb                                  code.js:195
    fa                                  code.js:190
    (anonymous function)                code.js:203

Ich hoffe, das hilft.

3voto

JaskeyLam Punkte 14171

Funktion:

function print_call_stack(err) {
    var stack = err.stack;
    console.error(stack);
}

Anwendungsfall:

     try{
         aaa.bbb;//error throw here
     }
     catch (err){
         print_call_stack(err); 
     }

2voto

CodeToLife Punkte 2906

zumindest in Edge 2021 :

console.groupCollapsed('jjjjjjjjjjjjjjjjj')
    console.trace()
    try {
        throw "kuku"
    } catch(e) {
        console.log(e.stack)
    }
console.groupEnd()
traceUntillMe()

und du bist fertig, mein Freund

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X