মূল প্রশ্নের মন্তব্যে যেমন উল্লেখ করা হয়েছে তেমন একটি ভাল (এবং সাধারণ) সমাধান হ'ল এই stack
জাতীয় কোনও Error
বস্তুর সম্পত্তি ব্যবহার করা :
function stackTrace() {
var err = new Error();
return err.stack;
}
এটি এর মতো আউটপুট উত্পন্ন করবে:
DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
ইউআরএল এবং লাইন নম্বর, এর কলিং ফাংশন, ইত্যাদি সহ কলিং ফাংশনটির নাম দেওয়া।
আমার বর্তমানে একটি বিস্তৃত এবং সুন্দর সমাধান আছে যা আমি বর্তমানে একটি প্রকল্পের জন্য তৈরি করেছি যা আমি বর্তমানে কাজ করছি এবং আমি সাধারণীকরণের জন্য এটি বের করে এনে কিছুটা পুনরায় কাজ করেছি। এটা এখানে:
(function(context){
// Only global namespace.
var Console = {
//Settings
settings: {
debug: {
alwaysShowURL: false,
enabled: true,
showInfo: true
},
stackTrace: {
enabled: true,
collapsed: true,
ignoreDebugFuncs: true,
spacing: false
}
}
};
// String formatting prototype function.
if (!String.prototype.format) {
String.prototype.format = function () {
var s = this.toString(),
args = typeof arguments[0],
args = (("string" == args || "number" == args) ? arguments : arguments[0]);
if (!arguments.length)
return s;
for (arg in args)
s = s.replace(RegExp("\\{" + arg + "\\}", "gi"), args[arg]);
return s;
}
}
// String repeating prototype function.
if (!String.prototype.times) {
String.prototype.times = function () {
var s = this.toString(),
tempStr = "",
times = arguments[0];
if (!arguments.length)
return s;
for (var i = 0; i < times; i++)
tempStr += s;
return tempStr;
}
}
// Commonly used functions
Console.debug = function () {
if (Console.settings.debug.enabled) {
var args = ((typeof arguments !== 'undefined') ? Array.prototype.slice.call(arguments, 0) : []),
sUA = navigator.userAgent,
currentBrowser = {
firefox: /firefox/gi.test(sUA),
webkit: /webkit/gi.test(sUA),
},
aLines = Console.stackTrace().split("\n"),
aCurrentLine,
iCurrIndex = ((currentBrowser.webkit) ? 3 : 2),
sCssBlack = "color:black;",
sCssFormat = "color:{0}; font-weight:bold;",
sLines = "";
if (currentBrowser.firefox)
aCurrentLine = aLines[iCurrIndex].replace(/(.*):/, "$1@").split("@");
else if (currentBrowser.webkit)
aCurrentLine = aLines[iCurrIndex].replace("at ", "").replace(")", "").replace(/( \()/gi, "@").replace(/(.*):(\d*):(\d*)/, "$1@$2@$3").split("@");
// Show info if the setting is true and there's no extra trace (would be kind of pointless).
if (Console.settings.debug.showInfo && !Console.settings.stackTrace.enabled) {
var sFunc = aCurrentLine[0].trim(),
sURL = aCurrentLine[1].trim(),
sURL = ((!Console.settings.debug.alwaysShowURL && context.location.href == sURL) ? "this page" : sURL),
sLine = aCurrentLine[2].trim(),
sCol;
if (currentBrowser.webkit)
sCol = aCurrentLine[3].trim();
console.info("%cOn line %c{0}%c{1}%c{2}%c of %c{3}%c inside the %c{4}%c function:".format(sLine, ((currentBrowser.webkit) ? ", column " : ""), ((currentBrowser.webkit) ? sCol : ""), sURL, sFunc),
sCssBlack, sCssFormat.format("red"),
sCssBlack, sCssFormat.format("purple"),
sCssBlack, sCssFormat.format("green"),
sCssBlack, sCssFormat.format("blue"),
sCssBlack);
}
// If the setting permits, get rid of the two obvious debug functions (Console.debug and Console.stackTrace).
if (Console.settings.stackTrace.ignoreDebugFuncs) {
// In WebKit (Chrome at least), there's an extra line at the top that says "Error" so adjust for this.
if (currentBrowser.webkit)
aLines.shift();
aLines.shift();
aLines.shift();
}
sLines = aLines.join(((Console.settings.stackTrace.spacing) ? "\n\n" : "\n")).trim();
trace = typeof trace !== 'undefined' ? trace : true;
if (typeof console !== "undefined") {
for (var arg in args)
console.debug(args[arg]);
if (Console.settings.stackTrace.enabled) {
var sCss = "color:red; font-weight: bold;",
sTitle = "%c Stack Trace" + " ".times(70);
if (Console.settings.stackTrace.collapsed)
console.groupCollapsed(sTitle, sCss);
else
console.group(sTitle, sCss);
console.debug("%c" + sLines, "color: #666666; font-style: italic;");
console.groupEnd();
}
}
}
}
Console.stackTrace = function () {
var err = new Error();
return err.stack;
}
context.Console = Console;
})(window);
এটি গিটহাবে পরীক্ষা করুন (বর্তমানে v1.2)! আপনি এটির মতো ব্যবহার করতে পারেন Console.debug("Whatever");
এবং সেটিংসের উপর নির্ভর করে Console
আউটপুট এবং স্ট্যাক ট্রেস (বা কেবল সাধারণ তথ্য / অতিরিক্ত কিছু নয়) মুদ্রণ করুন। এখানে একটি উদাহরণ:
Console
অবজেক্টের সেটিংসের সাথে চারপাশে খেলা নিশ্চিত করুন ! আপনি ট্রেসের লাইনের মধ্যে ব্যবধান যোগ করতে এবং এটি পুরোপুরি বন্ধ করতে পারেন। এখানে এটি Console.trace
সেট করা আছে false
:
এমনকি আপনি দেখানো প্রথম বিট বন্ধ (সেট Console.settings.debug.showInfo
করা false
) বা ডিবাগিং পুরোপুরি অক্ষম Console.settings.debug.enabled
করতে false
পারেন (সেট করা ) যাতে আপনাকে আর কোনও ডিবাগের বিবৃতিতে মন্তব্য করতে হবে না! কেবল তাদের মধ্যে রেখে দিন এবং এটি কিছুই করবে না।