2012-11-20 16 views
8

Qualche suggerimento su come, in modo cross-browser, generare una traccia dello stack in javascript?Come generare javascript stacktrace?

I browser più recenti, Chrome e Firefox, espongono un oggetto console che consente di generare tracce di stack. Questo metodo non fornisce un metodo per archiviare la traccia dello stack su una variabile.

https://github.com/eriwen/javascript-stacktrace Funziona abbastanza bene, ma rende richieste ajax separate per caricare i file di script inclusi come parte della traccia. Questo sembra essere un metodo comune nelle librerie di traccia. Suppongo che i browser non espongano informazioni sufficienti per generare una traccia di stack significativa (numeri di riga, nomi di funzioni, nomi di file, argomenti, ecc.).

+0

Lei ha ragione che IE9- (ammettiamolo, che, probabilmente, ciò che siamo avere problemi con qui) non fornisce molte informazioni utili. Si potrebbe ottenere il numero di file e di linea da 'window.onerror', eccetto che si attiva solo una volta e il numero di linea a volte è sbagliato. –

+0

Sì, come al solito, IE è il bambino problematico. Sono bloccato a supportare IE7 per il quale il numero di riga dell'evento onerror e le informazioni sul nome della funzione sono terribili. Può essere ancora utile; Lo uso per scrivere registri per errori non rilevati. – Kyle

risposta

1

Creare un oggetto Errore e controllarlo per un membro dello stack. Adattato da Code Overtones:

var e = new Error('dummy'); 
var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '') // remove lines without '(' 
    .replace(/^\s+at\s+/gm, '') // remove prefix text ' at ' 
    .split('\n'); 
console.log(stack); 

Error.stack è documentato in Mozilla's reference documentation.

0

Airbrake provides a JavaScript library for logging stacktraces al proprio account Airbrake o server Errbit.

Non riesco a ottenere tracce di stack in IE, mentre altri possono essere imperfetti, ma sicuramente sembra che sia sulla falsariga di quello che stai cercando.

+0

Grazie. Ho già un framework che può accedere al mio server. È fondamentalmente log4j in javascript. Il codice di generazione dello stack trace nel collegamento che hai fornito sembra essere stato preso in prestito dal progetto nella mia domanda. Sto cercando altre librerie per la generazione dello stack-trace. L'attuale quadro di registrazione in uso dovrebbe essere separato. – Kyle

Problemi correlati