Pourquoi dois-je obtenir aucun numéro de ligne à partir d'une trace de la pile créée à partir des exceptions?

StackOverflow https://stackoverflow.com/questions/2228893

Question

Ok

; en supposant que ce code en cours d'exécution en mode débogage -

static StackFrame GetTopFrameWithLineNumber(Exception e)
{
    StackTrace trace = new StackTrace(e);
    foreach (StackFrame frame in trace.GetFrames())
    {
        if (frame.GetFileLineNumber() != 0)
        {
            return frame;
        }
    }
    return null;
}

Je retourne toujours null. Pourquoi les cadres de pile ont aucun numéro de ligne alors que si j'inspecte la chaîne de Exception.StackTrace, il ne les ont clairement un code non-cadre? Est-il un problème avec la construction d'une trace de la pile d'une exception que je ne suis pas au courant?

MODIF.NUMERO CLARITY: Dans l'exception lancée, je peux voir les numéros de ligne dans la propriété StackTrace. Je suppose que signifie que je dois tout ce que je dois.

Était-ce utile?

La solution

Selon le sur la surcharge du constructeur StackTrace qui prend une exception vous ne pouvez pas attendre les numéros de ligne lors de la création du StackTrace de cette façon.

  

Le StackTrace est créé avec le   thread courant de l'appelant, et ne   contenir le nom de fichier, numéro de ligne, ou   informations colonne.

Pour obtenir les numéros de ligne , vous devez utiliser la surcharge qui prend un bool ainsi que la d'exception.

Vous devez également les fichiers de symboles (PDB) pour les numéros de ligne. Les fichiers de symboles sont disponibles pour à la fois mise au point et la libération builds.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top