2010-09-08 2 views
4

Я завернутые звонки на поджигатели console.log в функции регистрации (что для проверки существования консоли вместе с другими флагами)Получение поджигатель консоли для отображения различных номеров строк

, например:

Log(string) { if (console && DEBUG) console.log(string); } 

моя проблема в том, что консоль firebug показывает номер строки вызова функции console.log, а не вызов функции журнала.

Есть ли способ изменить то, что показывает номер строки Firebug?

+1

Связанный: http://stackoverflow.com/questions/1571856/throwing-errors-in-javascript-with-error-object-relevancy –

+1

Это полезно, я знаю, как справляться со стеком. Вопрос: могу ли я отредактировать номер строки, отображаемую консолью firebug, справа, поскольку она имеет событие сборки в строке сборки goto. – Raynos

ответ

2

Firebug не позволяет вам изменить номер строки на консоли с помощью кода.

1

console.trace() предоставит вам стек вызовов.

См. http://getfirebug.com/logging для получения дополнительной информации.

+0

console.trace дает мне полную трассировку стека. Я просто хочу знать уровень стека 1 уровня, не забивая консоль – Raynos

0

Я принял несколько иной подход и только что определил свойство, которое устанавливает переменную __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) 
0

Там, кажется, не быть способ сделать это, так что я использую console.group

console.group(file +' (line '+ line +')'); 
console.log(data); 
console.groupEnd();