2010-02-09 15 views
8

OK; assumendo questo codice in esecuzione in modalità di debug -Perché non ottengo nessun numero di linea da una traccia stack creata da Eccezioni?

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

Sto restituendo SEMPRE null. Perché i riquadri dello stack non hanno numeri di riga quando si ispeziona la stringa Exception.StackTrace, chiaramente li ha per qualsiasi codice non-framework? C'è qualche problema con la costruzione di una traccia dello stack da un'eccezione di cui non sono a conoscenza?

MODIFICA PER CHIAREZZA: Nell'eccezione generata posso vedere i numeri di riga nella proprietà StackTrace. Suppongo che questo significhi avere tutto ciò di cui ho bisogno.

risposta

16

In base allo documentation on the StackTrace constructor overload that takes an exception non è possibile aspettarsi numeri di linea durante la creazione dello StackTrace in questo modo.

Lo StackTrace è creato con il thread corrente del chiamante, e non contiene il nome del file, il numero di riga, o informazioni sulla colonna.

per ottenere i numeri di riga, è necessario utilizzare the overload that takes a bool as well as the exception.

Sono inoltre necessari i file di simboli (pdb) per i numeri di riga. I file di simboli sono disponibili per sia per il debug sia per le versioni di rilascio.

+0

Poiché posso vedere i numeri di riga nella stringa exception.stacktrace sebbene ciò non significhi che io abbia il pdb? – Stimul8d

+0

Non penso che questo sia un caso di mancanza di pdb dal momento che è in grado di vedere i numeri di riga. –

+0

ahh, così fa; buona chiamata. – Stimul8d

Problemi correlati