[Javascript] फायरबग का उपयोग कर पूरे कार्यक्रम के लिए फंक्शन लॉग / स्टैक ट्रेस प्रिंट करें



Answers

जब मुझे एक स्टैक ट्रेस की आवश्यकता होती है तो मैं निम्नलिखित करता हूं, शायद आप इससे कुछ प्रेरणा ले सकते हैं:

function logStackTrace(levels) {
    var callstack = [];
    var isCallstackPopulated = false;
    try {
        i.dont.exist += 0; //doesn't exist- that's the point
    } catch (e) {
        if (e.stack) { //Firefox / chrome
            var lines = e.stack.split('\n');
            for (var i = 0, len = lines.length; i < len; i++) {
                    callstack.push(lines[i]);
            }
            //Remove call to logStackTrace()
            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 logStackTrace()
            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;
        }
    }
    if (levels) {
        console.log(callstack.slice(0, levels).join('\n'));
    }
    else {
        console.log(callstack.join('\n'));
    }
};

मॉडरेटर का नोट : इस जवाब में कोड एरिक वेंडरलिन के ब्लॉग से इस पोस्ट में भी दिखाई देता है। इस उत्तर के लेखक ने इसे अपने स्वयं के कोड के रूप में दावा किया है, हालांकि, यहां लिंक किए गए ब्लॉग पोस्ट से पहले लिखा गया है। सिर्फ अच्छे विश्वास के प्रयोजनों के लिए, मैंने पोस्ट और इस नोट का लिंक जोड़ा है।

Question

फायरबग में किसी विशेष फ़ंक्शन नाम पर कॉल लॉग करने की क्षमता होती है। मैं एक बग की तलाश में हूं जो कभी-कभी किसी पृष्ठ को प्रतिपादन से रोकता है, लेकिन किसी भी त्रुटि या चेतावनियों का कारण नहीं बनता है। बग केवल आधा समय लगता है। तो मैं पूरे कार्यक्रम के निष्पादन के लिए पूरे कार्यक्रम, या किसी प्रकार के स्टैक ट्रेस के लिए सभी फ़ंक्शन कॉल की सूची कैसे प्राप्त करूं?




मैंने फायरबग के बिना इसे पूरा किया। क्रोम और फ़ायरफ़ॉक्स दोनों में परीक्षण किया गया:

console.error("I'm debugging this code.");

एक बार आपका प्रोग्राम कंसोल पर प्रिंट करता है, तो आप कॉल स्टैक का विस्तार करने के लिए उस पर छोटे तीर पर क्लिक कर सकते हैं।






Links