我已经将对firebug控制台的console.log的调用封装在一个日志函数中(该函数检查控制台是否存在以及其他标志)。
例如:
Log(string) { if (console && DEBUG) console.log(string); }
我的问题是,Firebug控制台显示的是console.log函数调用的行号,而不是Log函数调用的行号。
有没有办法更改Firebug显示的行号?
我已经将对firebug控制台的console.log的调用封装在一个日志函数中(该函数检查控制台是否存在以及其他标志)。
例如:
Log(string) { if (console && DEBUG) console.log(string); }
我的问题是,Firebug控制台显示的是console.log函数调用的行号,而不是Log函数调用的行号。
有没有办法更改Firebug显示的行号?
Firebug不允许您通过代码更改控制台中的行号。
使用console.trace()可以获取调用堆栈。
有关更多信息,请参见http://getfirebug.com/logging。
似乎没有办法做到这一点,所以我一直在使用console.group
console.group(file +' (line '+ line +')');
console.log(data);
console.groupEnd();
我采用了一种略有不同的方法,只定义了一个属性来设置一个__stack__变量,通过故意抛出错误,我们可以得到文件名、行号(以及许多其他调用者和他们的行号,如果您选择实现它们)。
另外,我将其设置为变量而不是设置日志函数,但是当设置时会被记录下来。这将是LOG设置的位置,而不是它被定义的位置。
它就像LOG="我的消息"一样简单。然后,您可以稍后将其用作变量,以获取上次调试的位置:alert(LOG)
/*@const*/ //for closure-compiler
DEBUG=2 // 0=off, 1=msg:file:line:column, 2=msg:stack-trace
if(DEBUG){
/*@const @constructor*/
Object.defineProperty(window,'__stack__',{get:function(){
try{_ფ_()}catch(e){return e.stack.split(":")}
}})
/*@const @constructor*/
Object.defineProperty(window,'__file__',{get:function(){
var s=__stack__,l=s.length
return (isNaN(s[l-2]))?s[l-2]:s[l-3]
}})
/*@const @constructor*/
Object.defineProperty(window,'__line__',{get:function(){
var s=__stack__,l=s.length
return (isNaN(s[l-2]))?s[l-1]:s[l-2]
}})
/*@const @constructor*/
Object.defineProperty(window,'__col__',{get:function(){
var s=__stack__,l=s.length
return (isNaN(s[l-2]))?"NA":s[l-1]
}})
/*@const @constructor*/
Object.defineProperty(window,'LOG',{
get:function(){return out},
set:function(msg){if(DEBUG>1)out=msg+"\t-\t"+__stack__
else out=msg+" in file:"+__file__+" @ Line:"+__line__+", Column:"+__col__
console.log(out)}
})
}//end if(DEBUG)