2010-03-03 4 views
8

Lorsqu'une exception est affichée (ou plus générale - lorsqu'elle est convertie en chaîne), la trace de pile est affichée. Ce que je veux faire est de changer le format des chemins de fichier de code source montrés dans une telle trace.Comment formater la trace de pile d'Exception en C#?

Spécifiquement je voudrais laisser des noms de fichiers seulement (sans chemin complet) ou montrer seulement la partie du chemin qui commence par le répertoire de base du projet. Les chemins complets sont généralement inutiles et encombrent tout le message.

Comment puis-je faire cela?

Répondre

23

J'ai posé une question similaire, mais pas tout à fait la même, ici: Print stack trace information in C#.

Ce que vous pouvez faire est la suivante:

var trace = new System.Diagnostics.StackTrace(exception); 

qui vous donne un objet StackTrace qui vous donne toutes les informations dont vous avez besoin. Dans mon cas, il s'agissait d'éviter d'avoir à traiter du texte d'exception localisé, mais j'imagine que vous pouvez utiliser la même approche pour vos besoins.


Modifier: Je note que j'ai ajouté un commentaire à la accepted answer à ma question liée à un paramètre « needFileInfo » au constructeur. Je vois ce constructeur ici: StackTrace(Exception e, bool fNeedFileInfo), je ne peux pas trouver le code en question en ce moment mais je suppose que vous devez passer true à cet argument. Je suppose que l'expérimentation est la clé ici.

En d'autres termes, je suppose que le code devrait être ceci:

var trace = new System.Diagnostics.StackTrace(exception, true); 
+1

+1 bon conseil sur la classe StackTrace. Je n'ai jamais su qu'il pourrait prendre une exception en tant que paramètre constructeur! – Josh

+0

En quoi est-ce différent de 'exception.StackTrace'? –

+4

Exception.StackTrace est une chaîne qui fournit un accès par programmation aux parties de la trace de la pile, y compris les noms de fichier, les numéros de ligne, les noms de classe, etc., en pièces, et non en une seule chaîne. –

2

Vérifiez la classe System.Diagnostics.StackFrame et la méthode GetFileName. Vous pouvez écrire une méthode qui obtiendra la trace de la pile et les noms des fichiers source que vous pouvez appeler dans votre gestionnaire d'exceptions.

Questions connexes