Catturare ultima riga di codice prima dell errore

di il
7 risposte

Catturare ultima riga di codice prima dell errore

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

  • Re: Catturare ultima riga di codice prima dell errore

    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.
  • Re: Catturare ultima riga di codice prima dell errore

    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...
  • Re: Catturare ultima riga di codice prima dell errore

    L'errore l'ha generato l'assegnazione (il tentativo di ) di una stringa ad una variabile di tipo numerico ,direi che non c'è altro
  • Re: Catturare ultima riga di codice prima dell errore

    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
  • Re: Catturare ultima riga di codice prima dell errore

    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.
  • Re: Catturare ultima riga di codice prima dell errore

    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.
  • Re: Catturare ultima riga di codice prima dell errore

    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