SORU
26 ŞUBAT 2009, PERŞEMBE


Nasıl bir Javascript istisnası attığımda yığın izlemesini alabilir miyim?

Eğer Javascript bir durum kendimi (, throw "AArrggg" eg) atarsam, nasıl trace (Firebug ya da başka) yığın alabilir miyim? Şimdi sadece mesaj değil.

editBirçok kişi aşağıda attılar olarak, olası bir izleme için bir yığınJavaScript durumama bir yığın izlemesi almak istiyorumbenimözel durumlar. Örneğin:

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

foo çağrıldığında, bir yığın almak istiyorum aramaları içeren izleme, *, bar*bar7.

CEVAP
11 Mart 2009, ÇARŞAMBA


this snippet modifiye edilmiş bir versiyonu biraz yardımcı olabilir:

function stacktrace() { 
  function st2(f) {
    return !f ? [] : 
        st2(f.caller).concat([f.toString().split('(')[0].substring(9)   '('   f.arguments.join(',')   ')']);
  }
  return st2(arguments.callee.caller);
}

< / ^ br . DÜZENLEME :

Orijinal sorusu üzerine yorumlarda belirttiği gibi (ve daha kolay) daha iyi bir çözüm gibi Error bir nesnenin stack Bu özelliği kullanmak için:

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

Bunun gibi bir çıktı oluşturur:

DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6

URL ile birlikte arama işlevinin bir isim vermiş, amacını ve işlevini.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013