Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2010, 18:41
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Error: чиним стектрейс в огненном жуке
открываем огненную лису с сидящим на ней огненным жуком и экспериментируем..

function throwException( ){
    (void 0)()
}
throwException()

этот код выведет в консоль ошибку и стектрейс для неё

function throwError( ){
    throw new Error( 'custom error' )
}
throwError()

а этот - только ошибку, а стектрейс - потеряется

следующий небольшой скрипт чинит стектрейс при использовании кастомных исключений:
var Error= new function( Original ){

Version: 1
Description: "repairs mozilla's stacktrace in custom errors"
License: 'public domain'

Implementation:

var Error= ( window.console && Original && ( new Original ).stack )
?   function( message ){
        var e= new Original( message )
        var custom= function( msg, file, line ){
            restore()
            if( other && other.apply( this, arguments ) ) return true
            if(( e.message != msg )||( e.fileName != file )||( e.lineNumber != line )) return
            var stack= e.stack.split( '\n' )
            stack= stack.slice( 2, stack.length - 1 )
            var self= this
            stack[0].replace( /^.*\(.+?\)@(.+):(\d+)$/, function( str, file, line ){
                e.fileName= file
                e.lineNumber= Number( line )
            })
            stack[ stack.length - 1 ]= stack[ stack.length - 1 ].replace( /^@.+:\d+$/, function( str ){
                return 'source file()' + str
            })
            e.stack= stack.join( '\n' )
            console.error( e )
            return true
        }
        var other= window.onerror
        var restore= function(){
            if( window.onerror === custom ) window.onerror= other
        }
        window.onerror= custom
        setTimeout( restore, 1 )
        return e
    }
:   Original

Export: return Error

Usage: throw new Error( 'custom error' )

}( window.Error )
__________________
.ня

Последний раз редактировалось tenshi, 10.03.2010 в 23:59.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск