Perché non ottengo i numeri di riga da una traccia dello stack creato da eccezioni?
-
19-09-2019 - |
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.
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.