открываем огненную лису с сидящим на ней огненным жуком и экспериментируем..
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 )