2009-12-14 7 views
24

Lors de l'interception/gestion des exceptions dans JavaScript, comment puis-je déterminer la pile d'appels lorsque l'exception s'est produite? (Et aussi, si possible, ce que le numéro de la ligne a été) Chaque navigateur traite différemmentGestion des exceptions JavaScript - affichage du numéro de ligne

try 
{ 
    // etc... 
} 
catch (ex) 
{ 
    // At this point here I want to be able to print out a detailed exception 
    // message, complete with call stack, and if possible line numbers. 
} 

Répondre

16

, donc il n'y a pas une façon universelle de le faire. This blog post dispose d'un bon code pour vider une trace de pile pour la plupart des navigateurs pris en charge. Je ne pense pas qu'il existe un bon moyen de fournir le numéro de ligne.

Si vous cherchez à déboguer une fonction en particulier, Firebug a une bonne fonction de trace de pile (vis console.trace()).

+0

Bien sûr, FireBug! – Upperstage

+1

Ce blog est assez vieux (2008). Il doit y avoir un meilleur moyen. – RayLoveless

+0

blog est mort ... –

11

Regardez this.

Une façon d'analyser les informations disponibles:

try 
{ 
    doInit(); 
} catch(err) 
{ 
    var vDebug = ""; 
    for (var prop in err) 
    { 
     vDebug += "property: "+ prop+ " value: ["+ err[prop]+ "]\n"; 
    } 
    vDebug += "toString(): " + " value: [" + err.toString() + "]"; 
    status.rawValue = vDebug; 
} 
+0

Juste une note - si vous utilisez le côté serveur de noeud cela fonctionne très bien. Upvoted - Merci d'avoir posté! – j03m

1

J'ai découvert que dans l'exécution de JavaScript sous IE, il est impossible de capturer une trace de la pile au point qu'une exception est pris. Selon this PDF, la seule façon d'obtenir une trace de pile dans IE est si vous ne gérez pas l'exception.