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.

0voto

Darel Points 485

Dans VS 2008 Express, je l'ai trouvé sous Project Properties --> Compile --> Advanced Compile Options.

1 votes

Qu'avez-vous trouvé ? Vous pouvez poster un commentaire si vous ne voulez pas poster une réponse complète.

0voto

abdelrady Points 33

Vous pouvez envisager d'activer le déploiement des fichiers *.pdb, plutôt que de les copier à chaque fois que vous déployez une version.

http://blog.deltacode.be/2012/09/26/include-pdb-files-in-web-application-publish-for-release-mode-vs2012/

-5voto

Tim Perry Points 7

Cela fonctionne à chaque fois. Il suffit de soustraire le message de la trace de la pile. Très facile ! En outre, dans vb.net, vous devez faire le "Show All Files" et inclure le pdb.

'Err is the exception passed to this function

Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length                   
    If (IsNumeric(lineGrab(i))) Then
        lineNo.Append(lineGrab(i))
    End If
    i += 1
End While

'LineNo holds the number as a string

Version C# :

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);

int i = 0;
int value;
while (i < lineGrab.Length)
{
    if (int.TryParse(lineGrab[i].ToString(), out value))
    {
        strLineNo.Append(lineGrab[i]);
    }
    i++;
}

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