যখন আমার স্ট্যাক ট্রেসের প্রয়োজন হয় আমি নিম্নলিখিতটি করি, সম্ভবত আপনি এটি থেকে কিছুটা অনুপ্রেরণা আনতে পারেন:
function logStackTrace(levels) {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist += 0;
} catch (e) {
if (e.stack) {
var lines = e.stack.split('\n');
for (var i = 0, len = lines.length; i < len; i++) {
callstack.push(lines[i]);
}
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) {
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];
if (lines[i + 1]) {
entry += " at " + lines[i + 1];
i++;
}
callstack.push(entry);
}
}
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) {
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'));
}
};
মডারেটরের দ্রষ্টব্য : এই উত্তরের কোডটিও এরিক ওয়েেন্ডারলিনের ব্লগ থেকে এই পোস্টে উপস্থিত হবে বলে মনে হচ্ছে । এই উত্তরের লেখক এটিকে নিজের কোড হিসাবে দাবি করেছেন, যদিও এখানে লিঙ্কযুক্ত ব্লগ পোস্টের আগে লেখা হয়েছিল। শুধু সৎ-বিশ্বাসের উদ্দেশ্যে, আমি পোস্টটিতে এবং এই নোটটিতে লিঙ্কটি যুক্ত করেছি।