En Javascript, supposons que je veuille effectuer un nettoyage lorsqu'une exception se produit, mais que je laisse l'exception continuer à se propager sur la pile, par exemple :
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Le problème avec ce code est que le fait d'attraper et de relancer l'exception entraîne la perte des informations de la trace de pile jusqu'à ce point, de sorte que si l'exception est ensuite attrapée à nouveau, plus haut sur la pile, la trace de pile ne va que jusqu'au nouveau lancement. Cela craint car cela signifie qu'elle ne contient pas la fonction qui a réellement lancé l'exception.
Il s'avère que try..finally a le même comportement, au moins dans Chrome (c'est-à-dire que ce n'est pas le re-throw qui pose problème, mais la présence d'un bloc de gestion des exceptions).
Quelqu'un connaît-il un moyen de relancer une exception en Javascript tout en conservant la trace de la pile associée à cette exception ? A défaut, pourquoi ne pas suggérer d'autres moyens d'ajouter des gestionnaires de nettoyage à l'abri des exceptions, tout en capturant des traces de pile complètes lorsqu'une exception se produit ?
Merci de vos conseils :)