2010-01-26 2 views
16

Je développe actuellement une application C# qui a sa propre journalisation. Lorsque des exceptions sont levées, l'exception est enregistrée dans une liste qui peut être visualisée par l'utilisateur via une vue de liste. Lorsque l'utilisateur clique sur une exception dans la vue de liste, la trace de pile de l'exception est affichée dans une zone de texte. Mais même lorsque j'exécute le programme sur une machine distante, la trace de la pile affiche les chemins d'accès aux fichiers sources d'origine depuis la machine sur laquelle l'application a été compilée.Ne pas afficher les chemins de fichier de la machine de construction dans la trace de la pile

.: par exemple

at C:\Folder1\Folder2\Class1.cs:81 
at C:\Folder1\Folder2\Class2.cs:65 
at C:\Folder1\Folder1\Class3.cs:21 

Seuls les fichiers déployaient source sans dossiers serait bien ...

Comment puis-je changer ce comportement?

Y a-t-il une solution native? Ou dois-je simplement faire une manipulation de chaîne?

+0

À quoi ressemble votre code de connexion? – ChrisF

+0

Il suffit de filtrer le chemin avec une expression Regex. Ou Path.GetFileName(). –

Répondre

18

Vous avez probablement les fichiers .pdb avec l'application installée. Sans les fichiers .pdb, il ne doit pas afficher les emplacements des fichiers.

Jetez un oeil à Getting line numbers in exception stack trace in a Windows Service

et include line numbers in stack trace without pdb?

Vous ne pouvez pas obtenir une trace de pile avec les numéros de ligne directement depuis votre application à moins que vous regroupez l'APB.

+0

Merci =). Cela a fonctionné de cette façon. – Emiswelt

5

Les chemins de fichier sont inclus dans les fichiers "program database" (.pdb). Ces fichiers sont créés pendant la compilation et les chemins dans ces fichiers sont comme sur la machine de compilation.

Vous pouvez supprimer les fichiers .pdb de votre installation, mais de cette façon votre trace de pile sera à moitié aussi intéressante qu'elle l'est maintenant, puisqu'elle ne vous dira pas la ligne sur laquelle l'erreur est survenue. Normalement, vous n'exécutez pas de code dans l'environnement de production avec les fichiers Pdb joints.

Si vous souhaitez conserver la "trace de pile intéressante", vous pouvez envisager de remplacer les noms de dossier par une chaîne, après avoir appelé exceptionObject.toString().

+0

Merci =). Cela a fonctionné de cette façon. – Emiswelt

Questions connexes