ফায়ারব্যাগ ব্যবহার করে পুরো প্রোগ্রামের জন্য ফাংশন লগ / স্ট্যাক ট্রেস মুদ্রণ করুন


94

ফায়ারব্যাগের একটি নির্দিষ্ট ফাংশন নামে কল লগ করার ক্ষমতা রয়েছে। আমি এমন একটি ত্রুটি খুঁজছি যা কখনও কখনও কোনও পৃষ্ঠা রেন্ডারিং থেকে থামায় তবে কোনও ত্রুটি বা সতর্কতা সৃষ্টি করে না। বাগটি প্রায় অর্ধেক সময় উপস্থিত হয়। তাহলে আমি কীভাবে পুরো প্রোগ্রামটির জন্য সমস্ত ফাংশন কলগুলির একটি তালিকা পেতে পারি বা পুরো প্রোগ্রামটি কার্যকর করার জন্য কোনও ধরণের স্ট্যাক ট্রেস পাই?

উত্তর:


218

ফায়ারফক্স console.trace() কল স্ট্যাক প্রিন্ট করতে খুব সহজ যা সরবরাহ করে । এটি ক্রোম এবং আইই 11 এও উপলব্ধ ।

বিকল্পভাবে এরকম কিছু চেষ্টা করুন:

function print_call_stack() {
  var stack = new Error().stack;
  console.log("PRINTING CALL STACK");
  console.log( stack );
}

4
স্ট্যাকের দৈর্ঘ্য বাড়ানোর কোনও উপায় আছে কি? এটি খুবই উপকারী হবে।
রবি তেজা

✚1 কনসোল.ওয়ার্ন ('[সতর্কতা] কল স্ট্যাক:', নতুন ত্রুটি ()। স্ট্যাক);
user1742529

13

যখন আমার স্ট্যাক ট্রেসের প্রয়োজন হয় আমি নিম্নলিখিতটি করি, সম্ভবত আপনি এটি থেকে কিছুটা অনুপ্রেরণা আনতে পারেন:

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'));
    }
};

মডারেটরের দ্রষ্টব্য : এই উত্তরের কোডটিও এরিক ওয়েেন্ডারলিনের ব্লগ থেকে এই পোস্টে উপস্থিত হবে বলে মনে হচ্ছে । এই উত্তরের লেখক এটিকে নিজের কোড হিসাবে দাবি করেছেন, যদিও এখানে লিঙ্কযুক্ত ব্লগ পোস্টের আগে লেখা হয়েছিল। শুধু সৎ-বিশ্বাসের উদ্দেশ্যে, আমি পোস্টটিতে এবং এই নোটটিতে লিঙ্কটি যুক্ত করেছি।


4
ফায়ারবগে আপনি করতে পারেন এমন একটি কনসোল.ট্রেস () কল রয়েছে যা এটি করে।
এএমকমারম্যাক

এটা অসাধারণ. ফায়ারব্যাগে মিনিফাইড ফাইলগুলি নিয়ে ঝামেলা রয়েছে, এই স্ক্রিপ্টটি এটি করে!
pstadler

4
এফডব্লিউআইডাব্লু @ অ্যান্ড্রু-বারবার, উত্তরের লেখক কখনও নিজের বলে দাবি করেননি। শুধু গুণাবলী না। আপনার সম্পাদনাটি একটি মন্তব্য হওয়া উচিত।
Ascherer

7

আমি ফায়ারব্যাগ ছাড়াই এটি সম্পাদন করেছি। ক্রোম এবং ফায়ারফক্স উভয় ক্ষেত্রেই পরীক্ষিত:

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

আপনার প্রোগ্রামটি একবার এটি কনসোলে প্রিন্ট হয়ে গেলে, কল স্ট্যাকটি প্রসারিত করতে আপনি এটিতে সামান্য তীরটি ক্লিক করতে পারেন।


2

এটি সঠিকভাবে কোথায় কাজ করা বন্ধ করে দেয় তা নির্ধারণ করার জন্য আপনার কোডটি একবারে একটি লাইন বা একটি ফাংশন দিয়ে পদক্ষেপের চেষ্টা করুন। অথবা আপনার কোডের মাধ্যমে কিছু যুক্তিসঙ্গত অনুমান এবং স্ক্যাটার লগিং বিবৃতি তৈরি করুন।


4
এই. console.log('something')কোনটি (এবং না) ডাকা হচ্ছে তা দেখতে অবশ্যই আপনার ফাংশনে একটি বিবৃতি যুক্ত করুন
গ্যারেথ

4
প্রোগ্রামটি বিশাল, সুতরাং যখন প্রোগ্রামটি সঠিকভাবে চলছিল না তখন এর জন্য ফাংশন লগগুলির তুলনা করার একটি উপায় অনুসন্ধান করছি।
এ্যামকর্ম্যাক

4
আমি সম্মতি জানাই যে এটি কার্যকর হবে। আমি একটি বড় কোড বেসের মালিকানা নিতে পদক্ষেপ নিচ্ছি এবং এমন কিছু যা সমস্ত ফাংশন কলগুলির চলমান ট্রেস তৈরি করতে পারে তা অবশ্যই কোডের প্রবাহ / আকারের ধারণা পেতে এবং মৃত কোড সনাক্ত করতে সহায়তা করবে।
ম্যাথু নিকোলস

1

এটা চেষ্টা কর:

console.trace()

এটি সমস্ত ব্রাউজারগুলিতে সমর্থিত কিনা তা আমি জানি না, সুতরাং এটির উপস্থিতি কিনা তা আমি আগে যাচি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.