In dotNet una linea genera un'eccezione e viene rilevata, come è possibile determinare quale riga in quale file è stata generata l'eccezione? Sembra relativamente semplice, ma non riesco a capirlo ...Determinare quale riga del codice ha generato l'eccezione
risposta
Puoi farlo solo se disponi di simboli di debug.
catch(Exception ex) {
// check the ex.StackTrace property
}
Se si desidera eseguire il debug una situazione del genere in VS, è meglio che semplicemente controllare Thrown
casella di controllo Common Language Runtime Exceptions
in Exceptions
finestra situata in Debug
menu. Il debugger si interromperà non appena viene lanciata l'eccezione, anche se si trova in un blocco try
.
è possibile utilizzare il StackFrame Class:
try
{
...
...
}
catch(...)
{
StackFrame sf = new StackFrame(true);
int lineNumber = sf.GetFileLineNumber();
int colNumber = sf.GetFileColumnNumber();
string fileName = sf.GetFileName();
string methodName = sf.GetMethod().Name;
}
Nota che ciò restituirà le informazioni per la clausola 'catch' ... non dove è stata lanciata l'eccezione, per questo devi controllare il contenuto della proprietà 'StackTrace' dell'eccezione che hai catturato! – jerryjvl
Questa risposta è sbagliata, per le ragioni che jerryjvl ha affermato. Come può essere accettato come corretto? – Timwi
Beh, in .NET si dispone di che cosa è chiamato un FirstChanceException. Questi essenzialmente vengono lanciati prima che venga gestita un'eccezione. Ci sono due modi per esaminare il problema che stai presentando qui. Uno è da un angolo di debug. Se si esegue il debug, è possibile impostare il debugger in modo che rilevi le eccezioni generate dalla finestra Debug/Exceptions. Questo è più semplice in un contesto interattivo. SE avete bisogno di registrare queste informazioni all'interno di un contesto non interattivo poi vorrei fare qualcosa di simile a ciò che CMS sta parlando ...
try
{
...
}
catch(Exception ex)
{
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(ex);
System.Diagnostics.StackFrame firstFrame = stackTrace.GetFrame[0];
Console.WriteLine(firstFrame.GetFileLineNumber);
...
}
L'unica differenza è che si ottiene l'intero dello stack, quindi vai al primo frame, che è dove originariamente era stata lanciata l'eccezione.
Non è il frame 0 il metodo corrente del frame, non il punto in cui è stato generato l'errore? –
Personalmente, registro solo il valore restituito da ToString() dell'eccezione. L'intera traccia dello stack è inclusa. È una linea di codice ... semplice e semplice.
- 1. Determinare quale compilatore ha generato un Win32 PE
- 2. Come determinare quale codice di Ruby-on-Rails ha generato qualche SQL?
- 3. Come tornare alla riga di codice che ha generato un'eccezione nel debugger di Visual Studio 2010?
- 4. Multicast Java UDP, determinare quale gruppo ha inviato il pacchetto
- 5. Visual Studio può dirmi quale riferimento ha generato una NullReferenceException?
- 6. Come ottenere la riga di codice specifica che ha generato un errore
- 7. Determinare quale utente ha creato oggetti in SQL Server
- 8. Un modo per determinare quale oggetto ha chiamato un metodo?
- 9. Come determinare quale ValidationAttribute ha restituito un Errore Modello
- 10. Determinare quale utente ha cancellato un database SQL Server?
- 11. Sovrascrittura del costruttore DbContext generato dal codice
- 12. Determinare quale rubygem stai utilizzando
- 13. Come sopprimere l'analisi del codice sul codice generato?
- 14. Codice pre-generato Xcode
- 15. SQL: Identificazione quale colonna ha maggior valore per ogni riga
- 16. Codice file risorse non generato
- 17. Controllo del codice generato implicitamente dal compilatore C++
- 18. Transazione Rails: ha importanza su quale classe di codice ActiveRecord?
- 19. Come determinare quale CRC utilizzare?
- 20. C'è un modo per sapere quale compilatore ha generato una libreria statica?
- 21. Escludi codice generato nel sonar
- 22. ExcludeFromCodeCoverage Escludi codice generato automaticamente
- 23. backbone.js Visualizza determinare quale attributo del modello è cambiato
- 24. Determinare se QTableView ha un editor aperto
- 25. Codice di riga Xcode
- 26. Determinare quale modello corrisponde con Regex.Matches
- 27. jUnit: come determinare il livello di copertura del codice?
- 28. Quale codice ereditato ti ha impressionato o ispirato?
- 29. Java - Come verificare quale tipo di eccezione è stato generato?
- 30. Esiste una direttiva #pragma o simile per il codice C# generato per far corrispondere i numeri di riga del codice modello al numero di riga C#?
Questa è la risposta corretta. – Timwi