2010-07-19 9 views
9

किसी भी प्रोग्रामिंग भाषा में, मैं किसी भी फ़ंक्शन का पता लगा सकता हूं और जानता हूं कि कौन सा फ़ंक्शन दूसरे द्वारा बुलाया जाता है। लेकिन जावास्क्रिप्ट में, मुझे नहीं पता कि, से कोड मेरे द्वारा नहीं लिखा गया है और फ़ायरबग इस सुविधा को नहीं देता है - जहां तक ​​मुझे पता है।जावास्क्रिप्ट ईवेंट (स्टैक ट्रेस) का पता कैसे लगाएं?

एक उदाहरण:

मैं प्रत्येक कार्य है कि जब XYZ तत्व पर क्लिक कहा जाता है के समारोह नाम प्रदर्शित है, और उन्हें क्रम में प्रदर्शित करना चाहते हैं।

धन्यवाद।

उत्तर

10

इस मिला: A javascript stacktrace in any browser, James का कहना है कि वे एक github account now

function printStackTrace() { 
    var callstack = []; 
    var isCallstackPopulated = false; 
    try { 
    i.dont.exist+=0; //doesn't exist- that's the point 
    } catch(e) { 
    if (e.stack) { //Firefox 
     var lines = e.stack.split('\n'); 
     for (var i=0, len=lines.length; i<len; i++) { 
     if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) { 
      callstack.push(lines[i]); 
     } 
     } 
     //Remove call to printStackTrace() 
     callstack.shift(); 
     isCallstackPopulated = true; 
    } 
    else if (window.opera && e.message) { //Opera 
     var lines = e.message.split('\n'); 
     for (var i=0, len=lines.length; i<len; i++) { 
     if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) { 
      var entry = lines[i]; 
      //Append next line also since it has the file info 
      if (lines[i+1]) { 
      entry += " at " + lines[i+1]; 
      i++; 
      } 
      callstack.push(entry); 
     } 
     } 
     //Remove call to printStackTrace() 
     callstack.shift(); 
     isCallstackPopulated = true; 
    } 
    } 
    if (!isCallstackPopulated) { //IE and Safari 
    var currentFunction = arguments.callee.caller; 
    while (currentFunction) { 
     var fn = currentFunction.toString(); 
     var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous'; 
     callstack.push(fname); 
     currentFunction = currentFunction.caller; 
    } 
    } 
    output(callstack); 
} 

function output(arr) { 
    // Output however you want 
    alert(arr.join('\n\n')); 
} 
+1

यह ध्यान दिया जाना चाहिए कि उनके पास अब एक जिथब साइट है, https://github.com/eriwen/javascript-stacktrace –

+0

धन्यवाद जेम्स, यह कमाल है। मैं जवाब अपडेट करूंगा –

0

DynaTrace AJAX इस तरह की कुछ विशेषताएं हैं। बिल्कुल वही नहीं जो आप खोज रहे हैं लेकिन आपको तत्वों और कार्यों को तत्व पर बाध्य करता है और आपकी समस्या निवारण में सहायता करता है। एक मुफ्त डाउनलोड किया गया था, इसे जांचें।

2

आप stack() फ़ंक्शन कॉल (फ़ायरफ़ॉक्स पर) के साथ किसी भी त्रुटि का स्टैक ट्रेस देख सकते हैं। एक साधारण समारोह का निर्माण एक स्टैक ट्रेस ऐसा दिखाई दे सकता मुद्रित करने के लिए:

function getStackTrace() { 
    try { 
    unusedVariable++; // This creates an error we can trace 
    } 
    catch (e) { 
    return e.stack; 
    } 
} 

अन्य ब्राउज़रों स्टैक ट्रेस मुद्रण के विभिन्न तरीके हैं, लेकिन यह आप Firefox के लिए क्या जरूरत है आप मिलना चाहिए।

उम्मीद है कि इससे मदद मिलती है।

+0

यह कम से कम फ़ायरफ़ॉक्स 3.6.6 –

+0

पर ईस्टैक होना चाहिए।मस्तिष्क पर बहुत अधिक पायथन :-) (अब फिक्स्ड) – godswearhats

0

है तो आप बस अपने कोड डिबग करने के लिए चाहते हैं, तो आपका सबसे अच्छा विकल्प अपने ब्राउज़र के लिए एक डिबगर प्लग में प्राप्त करने के लिए है। फायरबग प्लग-इन स्टैक निशान प्रदान करता है। (see here)

यदि आप इसे अपने कोड में से करना चाहते हैं, तो जावास्क्रिप्ट की कोई मानक भाषा सुविधा नहीं है जो आपको ऐसा करने की अनुमति देती है। विभिन्न ब्राउज़र गैर-मानक एक्सटेंशन लागू कर सकते हैं, लेकिन आपको उन पर भरोसा नहीं करना चाहिए।

0

"कैसाब्लांका" का उल्लेख के रूप में ... ऊपर उल्लिखित js-स्टैक ट्रेस ( http://www.eriwen.com/javascript/js-stack-trace/) की साइट से कृपया ध्यान दें कि फ़ायर्फ़ॉक्स और क्रोम में:

स्पष्ट आसान तरीका: Firebug, क्रोम देव टूल्स, ड्रैगनफ्लाई इत्यादि

आप अपने जावास्क्रिप्ट में या फ़ायरबग कंसोल में console.trace() को कॉल करके किसी भी समय आसानी से स्टैक ट्रेस प्राप्त कर सकते हैं।

0

के बाद से यह लग रहा है जैसे आप ढेर निरीक्षण और जानकारी (फ़ंक्शन नाम) के टुकड़े ले जाना चाहते हैं, तो आप की तरह की जरूरत है लगता है

जिसके लिए वास्तव में बनाया गया था वह उद्देश्य

संबंधित मुद्दे