145 votes

Afficher le nombre de lignes dans le Stack Trace pour l'assemblage .NET en mode Release

Existe-t-il un moyen d'afficher les lignes dans la trace de la pile pour l'assemblage .NET construit/déployé en mode Release ?

UPDATE :

Mon application est divisée en trois projets de bibliothèque de classes et un projet de "site Web" ASP.NET. L'erreur que j'essaie de déceler se trouve dans l'un des trois projets de bibliothèque de classes. J'ai seulement déployé le fichier pdb pour le projet de bibliothèque de classes qui génère l'erreur "Object reference not set to an instance of an object".

Les numéros de ligne n'apparaissent toujours pas dans la trace de la pile. Dois-je déployer les fichiers pdb pour tous les projets afin d'obtenir les numéros de ligne dans le suivi de pile ?

Solution de travail

Le déploiement du fichier pdb pour chaque application a résolu le problème du numéro de ligne.

152voto

Coxy Points 5256
  • Allez dans la fenêtre des propriétés du projet où vous voulez voir les numéros de ligne de la trace de la pile.
  • Cliquez sur le bâtiment "onglet vertical".
  • Sélectionnez la configuration "Release". Vérifiez le paramètre constant DEBUG.
  • Décochez le paramètre "Optimiser le code" pour éviter le problème occasionnel de trace avec le code inlined (cette étape n'est pas essentielle).
  • Appuyez sur le bouton Advanced... et choisissez Output -> Debug Info -> pdb-only.
  • Déployez le fichier .pdb généré avec l'assemblage.

2 votes

Dois-je déployer le fichier pdb avec l'assemblage ?

7 votes

Oui. C'est là que se trouvent les symboles de débogage et les numéros de ligne.

5 votes

Vous ne voulez probablement pas exposer cette information si vous n'y êtes pas obligé. L'utiliser pour déboguer un problème de client, oui. Mais vous ne voulez pas toujours le faire car les informations de débogage peuvent révéler des données sensibles et constituer un vecteur d'attaque. Cela dépend de ce qu'est votre application.

17voto

user3250653 Points 1

Dans VS2012, vous devez également décocher la case "Exclure les symboles de débogage générés" dans la section Package/Publish Web des propriétés.

0 votes

Ou, s'il s'agit d'une application de bureau, assurez-vous que le fichier PDB est déployé.

16voto

Ma solution

Copiez le fichier pdb dans le même dossier que le fichier exécutable.

maintenant je peux voir le numéro de ligne quand je lance le fichier exe.

c'est la raison

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx

9voto

slolife Points 6528

J'ai rencontré des problèmes dans le passé où j'ai ressenti le besoin de déployer des fichiers PDB avec un build de version afin de traquer une erreur. La raison en est, comme vous l'avez dit, que l'exception se produisait dans une méthode de très grande taille et que je ne pouvais pas déterminer avec précision où elle se produisait.

Cela peut indiquer que la méthode doit être refactorisée en méthodes plus petites et plus granulaires. Il n'y a pas de réponse universelle, mais cette approche m'a bien servi à court terme (j'ai souvent trouvé le bogue pendant le remaniement) et à long terme.

Juste une idée.

0 votes

Ceci. Et au fur et à mesure, lancez des prises dans des endroits plus sommaires à un grain plus fin. Et augmentez les gardes au début de ces fonctions si des suppositions doivent être faites.

0 votes

Souvent dit et tellement vrai, cependant, il y a l'héritage, il y a des programmeurs qui écrivent de nouvelles grandes méthodes, et parfois une grande méthode est en fait la meilleure chose à faire (la diviser est déroutant ou YAGNI). De plus, même pour une méthode de 5 lignes, vous réduisez votre recherche de 5 fois. Les PDB sont donc un mal nécessaire en production, à moins que vous ne preniez la peine d'utiliser un serveur de symboles.

4voto

Ken Browning Points 15689

Inclure les symboles de débogage avec votre paquetage de construction/déploiement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X