Pull to refresh

Притча о пропавшем Стэке

JavaScript
— Здравствуй, дружок…
— Дяденька, вы снова расскажете мне сказку?
— Конечно! Какой умненький мальчик!
— А про что?
— М… сегодня я расскажу тебе о том, куда пропадают чересчур самостоятельные мальчики вроде тебя…
— Э! Что значит пропадают?
— Вот то и значит… На, держи огнелиса *протянул, держа за хвост, пылающее пламенем животное* Только осторожно — он горячий!
— Ай-ай-ай! Он брыкается!
— Посади на него огненного жука — мигом успокоится.
— Класс! Действует!
— Ато! Теперь скажи ему:
function throwException( ){
    (void 0)()
}
throwException()

— Он ругается!
— Именно, когда он слышит что-то непонятное, то начинает поливать тебя стектрейсами. А теперь скажи:
function throwError( ){<br> throw new Error( 'error' )<br>}<br>throwError()<br>
— Что-то буркнул и всё.
— Угу, тут ему видите ли лень трейсануть в тебя стек.
— Как же тогда быть? Иногда же бывает нужно сказать что-нибудь эдакое…
— Дай-ка его сюда… *шепчу ему на ушко мантру*
var Error= new function( Original ){<br><br>Version: 1<br>Description: "repairs mozilla's stacktrace in custom errors"<br>License: 'public domain'<br><br>Implementation:<br><br>var Error= ( window.console && Original && ( new Original ).stack )<br>? function( message ){<br> var e= new Original( message )<br> var custom= function( msg, file, line ){<br> restore()<br> if( other && other.apply( this, arguments ) ) return true<br> if(( e.message != msg )||( e.fileName != file )||( e.lineNumber != line )) return<br> var stack= e.stack.split( '\n' )<br> stack= stack.slice( 2, stack.length - 1 )<br> stack[0].replace( /^.*\(.+?\)@(.+):(\d+)$/, function( str, file, line ){<br> e.fileName= file<br> e.lineNumber= Number( line )<br> })<br> stack[ stack.length - 1 ]= stack[ stack.length - 1 ].replace( /^@.+:\d+$/, function( str ){<br> return 'source file()' + str<br> })<br> e.stack= stack.join( '\n' )<br> console.error( e )<br> return true<br> }<br> var other= window.onerror<br> var restore= function(){<br> if( window.onerror === custom ) window.onerror= other<br> }<br> window.onerror= custom<br> setTimeout( restore, 1 )<br> return e<br> }<br>: Original<br><br>Export: return Error<br><br>Usage: throw new Error( 'custom error' )<br><br>}( window.Error )<br>
— Что вы там шепчете ему?
— Не важно. Повтори теперь ему, что говорил ранее.
— Нихерасебе! Вот это трейсанул так трейсанул! В чём секрет?
— Ха! Это особая, уличная магия! Скажем так: я смог его убедить, что стектрейс очень важен для нас.
— М… ладно, понятно, а причём тут исчезновение мальчиков?
— А… да… пошли к дяде Хрому, мой маленький Стэк, он всё объяснит…
Tags:javascriptstacktracemozilla firefox
Hubs: JavaScript
Total votes 155: ↑113 and ↓42+71
Views809

Popular right now