2012-04-10 5 views

Antwort

4

Nr aufgetreten Das ist, warum Sie nicht minified Code während der Entwicklung/Debugging verwenden sollten.

+0

und heh, wäre es schön, wenn firebug & co eine Option hat, um automatisch verkleinert Code zu verschönern * und * Zuordnung Fehlerorte usw. zu den richtigen Zeilen in diesem verschönerten Code. – ThiefMaster

+2

Ich würde nicht davon ausgehen, dass dies während der Entwicklung ist. Ich habe genau die gleiche Frage wie der Fragesteller hier. Mein Code funktioniert gut, bis er minimiert wird. –

1

Sie können verfälschten Code verschönern. Im Chrom Inspector ist es der {} Button und heißt "pretty print".

Die Verschönerung dieses Codes bedeutet jedoch nicht, dass der ursprüngliche Code respektiert wird.

So werde ich sagen, was ThiefMaster sagte: Verwenden Sie keine verarmten Code während der Entwicklung/Debuggen.

1

Ein Grund, warum Sie ein minimiertes Skript debuggen sollten, ist, wenn Sie den Closing-Compiler zur Optimierung verwenden und der Optimierungsprozess einen Fehler verursacht hat. Für Browser, die die Spalte (Chrome, IE) in dem Stack-Trace liefern Sie so etwas wie tun:

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

Verbrauch: LOG="my message" zu schreiben „meine Botschaft“ zusammen mit der Zeilennummer und die Datei auf der Konsole oder an holen Sie sich das letzte Protokoll alert(LOG)

Sie können mehr in das Unkraut mit v8 zu bekommen (Chrom, node.js)

/*@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']()}}) 
Verwandte Themen