2016-10-28 3 views
5

La plupart des API des bibliothèques de nœuds sont de conception asynchrone. Lorsqu'une exception est renvoyée dans un rappel, la pile affiche uniquement la pile d'appels à partir de process._tickCallback.NodeJS: Est-il possible d'afficher la trace de pile d'une fonction asynchrone d'appel?

Je me demande s'il y a une astuce pour montrer aussi la trace de pile de la fonction qui a déclenché le _tickCallback.

+0

[Voici une méthode que vous pouvez utiliser (Lien vers un Gihub Gist).] (https://gist.github.com/lll000111/3d6a53da4d53beb909189793c7631ba6) Inconvénients: Quelques lignes supplémentaires de code - vous devez envelopper tous les asynchrones. appels de fonction avec 'try/catch' (vous pouvez aussi utiliser' promise.catch (...) '). Ensuite, vous créez un nouvel objet 'Error' et ajoutez sa propriété' stack' à la pile existante. Si c'est fait pour ALL async. appels de fonction vous vous retrouvez avec une trace de pile complète. Le désavantage de vitesse (création de trace de pile est cher) ne devrait pas importer pour async. fonctions (veuillez ne pas utiliser d'exceptions pour le flux de contrôle normal). –

Répondre

0

Vous pouvez jeter un coup d'œil aux longs stacktraces pour voir si cela correspond à vos besoins. Le module est appelé stackups. Tout ce que vous faites est l'installer:

npm install --save stackup 

puis l'exigent:

require('stackup'); 

Plus d'infos ici: https://github.com/groundwater/node-stackup

1

dans le nœud version 8 est apparu async_hooks

trace utilise cela pour async trace de pile