2013-03-17 9 views
6

Sono interessato a monitorare gli errori di javascript e registrare gli errori con il callstack.monitoraggio errori js

Non sono interessato a racchiudere tutto in blocchi try-catch.

Secondo questo articolo http://blog.errorception.com/2011/12/call-stacks-in-ie.html E 'possibile all'interno window.onerror "ricorsivamente chiamare .caller per ogni funzione nello stack di conoscere la funzione precedente nello stack"

Ho cercato di ottenere lo stack di chiamate:

window.onerror = function(errorMsg, url, lineNumber) 
{ 
    var stk = [], clr = arguments.callee.caller; 
    while(clr) 
    { 
     stk.push("" + clr); 
     clr = clr.caller; 
    } 
    // Logging stk 
    send_callstack_to_log(stk); 
} 

ma solo un passo è possibile anche se lo stack era molto più lungo:

(function() 
{ 
function inside() {it.will.be.exception;}; 
function middle() {inside()}; 
function outside() {middle()} 
outside(); 
})(); 

Un passaggio non è interessante perché gli argomenti su argomenti mi danno ancora più informazioni a riguardo.

Sì, l'ho provato con IE in base all'articolo sopra menzionato.

Nota: Ho anche provato ad aprire un account su "ERRORCAEPTION" per raccogliere il registro degli errori. L'ho provato con IE e "ERRORCAEPTION" riconosce che gli errori provengono da IE, ma non riesco a trovare alcuna informazione sul registro delle chiamate nel registro che ho lì.

+0

Si potrebbe dare un'occhiata a [stacktrace.js] (https://github.com/eriwen/javascript-stacktrace). È una soluzione cross-browser. – zeroflagL

risposta

1

dare uno sguardo qui: https://github.com/eriwen/javascript-stacktrace

Questo è quello che uso su Muscula, un servizio come errorception, tranne che è gratuito.

+0

Ho visto questo. Non mi aiuta all'interno di window.onerror. All'interno di try-catch è facile ottenere lo stack, ma come ho detto nella mia domanda - Non riesco a racchiudere tutto nei blocchi try-catch. Ma grazie per il tuo impegno. – Alexander

2

Sfortunatamente questo registro non sarà sempre disponibile, manca di numeri di linea, non ci si può davvero fidare.

Prova https://qbaka.com

Qbaka sovraccaricare automaticamente mucchio di funzioni JavaScript come addEventListener, setTimeout, XMLHtppRequest, ecc in modo che gli errori che accadono nel callback sono automaticamente avvolto con try-catch e si otterrà stacktraces senza alcuna modifica del codice.