Catturare ultima riga di codice prima dell errore

di elle0087 il
7 risposte
Ciao a tutti,
su un applicativio asp.net, c'è modo di recupare qual è l ultima riga di codice eseguita?
ho fatto una pagina custom a cui reindirizzarmi in caso di eccezzione, e sarebbe una gran cosa capire esattamente dov'è stato generato il problema.
già in debug, viene mostrato a video il codice, ma non capisco come fare a catturarlo.

7 Risposte

  • Cosa intendi per "catturarlo"? Lo StackTrace dell'eccezione (con una zeta sola) dice tutto... Usa il [Try... Catch... Finally] e hai il riferimento alla Sub/Function che solleva eccezione e anche il numero di riga.
  • Ciao,
    non uso il blocco try catch appositamente per fare in modo che ogni eccezione vada reindirizzata alla pagina custom che ho creato.
    <customErrors mode="On" defaultRedirect="CustomError.aspx" redirectMode="ResponseRewrite">
          <error statusCode="500" redirect="500.aspx"/>
        </customErrors>
    in questa mia pagina recupero l errore con
    Dim ex As Exception = Server.GetLastError()
    in questo modo recupero il messaggio d'errore, in questo caso "Cast non valido dalla stringa ""s"" al tipo 'Integer'."
    poi però non riesco a recupeare l'ultima istruzione eseguita, quella che ha generato l'eccezione.
    lo StackTrace che trovo nel catch è diverso da quello che trovo nel redirect, nonostante teoricamente dovrebbe essere lo stesso...
  • L'errore l'ha generato l'assegnazione (il tentativo di ) di una stringa ad una variabile di tipo numerico ,direi che non c'è altro
  • A me interessa sapere la riga di codice in cui è stata generata l eccezzione...nello stack del blocco try/catch compare, se invece recupero l eccezione nella pagina custom invece no...come mai??

    esempio con try/catch


    esempio con recupero nella pagina custom
  • Ma nel catch, gestisci tutto come vuoi. Al sollevamento dell'eccezione (sempre con una zeta sola), fai il redirect alla pagina che ti interessa e fai comparire lo stack trace, magari passando come parametro alla pagina l'eccezione diretta, senza cercarla con il Server.GetLastError(). Probabilmente l'eccezione che solleva il metodo Test_1, non viene registrata nel server... Nota che gli StackTrace sono completamente differenti.
  • Massi chiaro, è per non dover gestire try/catch ovunque...
    può sempre capitare che qualcosa scappi, per questo mi mando una email con l errore e la pagina da dove arriva.
    ma faccio fatica a capire l istruzione.
    se in debug mi viene mostrato a video la riga e il codice, vuol dire che in qualche modo di potrà fare.
  • Ok,
    ho risolto così:
    Dim ex As Exception = Server.GetLastError()
    
                'x ricavare la riga della pagine che ha sollevato l eccezione
                Dim StackTraces As New Diagnostics.StackTrace(ex.InnerException, True)
                Dim StackFrame = Nothing
    
                For Each StackFrame In StackTraces.GetFrames()
                    If (StackFrame.GetFileColumnNumber() > 0) Then
                        Exit For
                    End If
                Next
Devi accedere o registrarti per scrivere nel forum
7 risposte