Domanda

Va bene; supponendo che questo codice in esecuzione in modalità di debug -

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

Sono sempre di ritorno nullo. Perché gli stack frame non hanno i numeri di riga quando se ispezionare la stringa Exception.StackTrace, chiaramente non li ha per tutto il codice non-quadro? C'è qualche problema con la costruzione di una traccia dello stack da un'eccezione che io non sono a conoscenza?

Modifica PER CHIAREZZA: Nel eccezione generata posso vedere i numeri di riga nella proprietà StackTrace. Sto assumendo che significa che ho tutto il resto mi serve.

È stato utile?

Soluzione

In base alla sul sovraccarico di costruttore di StackTrace che richiede un'eccezione non ci si può aspettare i numeri di riga quando si crea lo StackTrace in quel modo.

  

Lo StackTrace viene creato con il   del chiamante thread corrente, e non lo fa   contenere il nome del file, il numero di riga, o   informazioni sulle colonne.

Per ottenere i numeri di riga , è necessario utilizzare l'overload che accetta un bool così come l'eccezione .

È inoltre necessario file di simboli (PPB) per i numeri di riga. I file di simboli sono disponibili per sia debug e build di rilascio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top