Quelqu'un sait-il comment imprimer une trace de pile dans Node.js?
javascript
node.js
stack-trace
mike.toString
la source
la source
sys.puts(new Error().stack)
(après avoir ajouté le module système)'util'
.new Error().stack
, ce qui fonctionne dans les cas où vous ne souhaitez pas impliquer la console.trace
est qu'il montre également la ligne / le contexte actuel, ce quistack
n'est pas le cas. L'information est dans l'objet d'erreur si vous voulez créer manuellement cette ligne, je suppose.Maintenant, il y a une fonction dédiée sur la console pour cela:
la source
console.trace()
.--stack_trace_limit=200
Comme déjà répondu, vous pouvez simplement utiliser la commande trace :
Cependant, si vous êtes venu à cette question en recherchant comment enregistrer la trace de pile d'une exception , vous pouvez simplement enregistrer l'objet Exception.
Il enregistrera:
Si votre version de Node.js est inférieure à 6.0.0 , la journalisation de l'objet Exception ne sera pas suffisante. Dans ce cas, il n'imprimera que:
Pour la version Node <6, utilisez
console.error(e.stack)
au lieu deconsole.error(e)
pour imprimer le message d'erreur plus la pile complète, comme le fait la version Node actuelle.Remarque: si l'exception est créée sous la forme d'une chaîne
throw "myException"
, il n'est pas possible de récupérer la trace de la pile et lese.stack
rendements de journalisation non définis .Pour être en sécurité, vous pouvez utiliser
et cela fonctionnera pour les anciennes et les nouvelles versions de Node.js.
la source
console.error(e)
N'imprimer tout dans l'e
objet, y comprise.stack
?Pour imprimer la trace de pile de la
Error
console de manière plus lisible:Exemple de résultat:
la source
Avec un module Node facilement disponible, il est possible d'obtenir des traces de pile complètes sur Node (mais avec une pénalité de performance mineure): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -traces-for-node-js
la source
Essayez Error.captureStackTrace (targetObject [, constructorOpt]) .
La fonction
a
etb
sont capturés dans la pile d'erreurs et stockés dansmyObj
.la source
stack
propriété, vous aurez besoin d'appeler ce si le nœud> = 6:Error.captureStackTrace(error)
.Error.captureStackTrace
apparaisse dans la trace de la pile, vous pouvez l'omettre en le passant commeconstructorOpt
argument.Pour ce que je sais, l'impression de la trace de pile complète dans nodejs n'est pas possible, vous pouvez simplement imprimer une trace de pile "partielle", vous ne pouvez pas voir d'où vous venez dans le code, juste où l'exception se produit. C'est ce que Ryan Dahl explique dans cette vidéo youtube. http://youtu.be/jo_B4LTHi3I au min 56:30 pour être précis. J'espère que cela t'aides
la source
La réponse de @isaacs est correcte, mais si vous avez besoin d'une pile d'erreurs plus spécifique ou plus propre , vous pouvez utiliser cette fonction:
Cette fonction est directement inspirée de la
console.trace
fonction dans NodeJS .Code source: version récente ou ancienne version .
la source
err.stack
est une réponse plus correcte.Si vous souhaitez uniquement consigner la trace de pile de l'erreur (et non le message d'erreur), le nœud 6 et supérieur inclut automatiquement le nom et le message d'erreur dans la trace de pile, ce qui est un peu gênant si vous souhaitez effectuer une gestion d'erreur personnalisée:
console.log(error.stack.replace(error.message, ''))
Cette solution de contournement enregistrera uniquement le nom de l'erreur et la trace de la pile (afin que vous puissiez, par exemple, formater le message d'erreur et l'afficher comme vous le souhaitez ailleurs dans votre code).
L'exemple ci-dessus afficherait uniquement le nom de l'erreur suivi de la trace de pile, par exemple:
Au lieu de:
la source
Au cas où quelqu'un chercherait toujours ceci comme je l'étais, alors il y a un module que nous pouvons utiliser appelé "stack-trace". C'est vraiment populaire. Lien NPM
Parcourez ensuite la trace.
Ou imprimez simplement la trace:
la source
vous pouvez utiliser le module node-stack-trace qui est un module d'alimentation complet pour suivre les piles d'appels.
la source