[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.");

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