2012-04-10 7 views
1

JavaScript 파일을 축소 할 때 오류의 줄 번호를 동적으로 가져올 수 있습니까? 모든 오류로 기록되는 순간 축소 된 JavaScript 파일의 오류 번호 얻기

라인에 당신이 개발/디버깅하는 동안 축소 된 코드를 사용하지 말아야 이유 0

답변

4

호 발생된다.

+0

그리고 불을 지르고 및 공동가 자동으로 축소 된 코드를 아름답게 할 수있는 옵션이 있다면 ㅎ, 그것은 좋은 것입니다 수 있습니다 * 및 * 매핑 오류 위치 등 그 아름다운 코드의 올바른 줄로 – ThiefMaster

+2

나는 이것이 개발 중에 있다고 가정하지 않을 것이다. 나는 여기에 묻는 사람과 정확히 같은 질문을 가지고있다. 내 코드는 축소 될 때까지 잘 작동합니다. –

1

당신은 축소 코드를 아름답게 처리 할 수 ​​있습니다. 크롬 관리자에서는 {} 버튼이며 "예쁜 프린트"라고합니다.

그러나이 코드를 아름답게해도 그것이 원래 코드를 존중한다는 것을 의미하지는 않습니다.

따라서 ThiefMaster은 다음과 같이 말합니다. 개발/디버깅 중에 축소 코드를 사용하지 마십시오.

1

축소 된 스크립트를 디버깅하려는 이유 중 하나는 클로저 컴파일러를 사용하여 최적화하고 최적화 프로세스가 버그를 일으킨 경우입니다. 당신이 뭔가를 할 수있는 스택 추적에서 열 (크롬, IE)를 공급하는 브라우저의 는 :

/*@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) 

사용법 : LOG="my message" 행 번호와 함께 "내 메시지"를 작성하고 콘솔하거나 파일로 마지막 로그를 얻을 수 alert(LOG)

당신은 (크롬 Node.js를) V8와 잡초로 더 얻을

/*@const @constructor*/ Object.defineProperty(this,'__stack',{get:function(){var o=Error['prepareStackTrace'],e=new Error,s;Error['prepareStackTrace']=function(_,s){return s},Error['captureStackTrace'](e,arguments['callee']),s=e['stack'],Error['prepareStackTrace']=o;return s}}) 

/*@const @constructor*/ Object.defineProperty(this,'__col__',{get:function(){return __stack[1]['getColumnNumber']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__eval_orig__',{get:function(){return __stack[1]['getEvalOrigin']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__file__',{get:function(){return __stack[1]['getFileName']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__func__',{get:function(){return __stack[1]['getFunctionName']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__function__',{get:function(){return __stack[1]['getFunction']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__is_constructor__',{get:function(){return __stack[1]['isConstructor']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__is_eval__',{get:function(){return __stack[1]['isEval']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__is_native__',{get:function(){return __stack[1]['isNative']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__is_top_level__',{get:function(){return __stack[1]['isTopLevel']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__line__',{get:function(){return __stack[1]['getLineNumber']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__method__',{get:function(){return __stack[1]['getMethodName']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__this__',{get:function(){return __stack[1]['getThis']()}}) 
/*@const @constructor*/ Object.defineProperty(this,'__type__',{get:function(){return __stack[1]['getTypeName']()}}) 
관련 문제