Toon posts:

[asp.net] stack proberen te achterhalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem, ik probeer de stack uit te lezen wanneer een fout optreedt. Dit zou op zich aardig moeten lukken met de System.Diagnostics namespace, maar gaat dus niet. Ik heb zo'n beetje de meeste opties geprobeert, maar ik krijg niets goed werkend. Ik probeer de functies die aangeroepen zijn te achterhalen. Ik heb de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
    Private Function Stack(ByVal ex As Exception) As String

        Dim myTrace As StackTrace = New StackTrace(ex)

        Dim nC As Integer = myTrace.FrameCount

        Do While nC > 0
            Response.write(myTrace.GetFrame(nC).GetMethod.Name)
            nC -= 1
        Loop

    End Function


hieruit dacht ik dus de functies te krijgen die aangeroepen worden tot dat de fout zich voordoet. Maar ik krijg eigenlijk alleen interne .net functies en dat zijn dus deze:

ExecuteStepSystem.Web.HttpApplication+IExecutionStep.ExecuteProcessRequestProcessRequestProcessRequestMainHandleError

hoe krijg ik mijn eigen functie namen te zien, ik heb ook al zitten spelen met zelf stackframe's te declaren, en daarmee terug te springen in de stack, dit ging op zich wel, maar ik krijg elke keer de huidige functie (stack) dus. Heeft iemand dit al eens gedaan? En zou die mij graag op de juiste weg willen helpen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Als er een fout optreedt, wordt er een Exception object gegooid, en dat object heeft een StackTrace property.

https://fgheysels.github.io/


  • sander_g
  • Registratie: Juli 2002
  • Laatst online: 16:48
Deze methode geeft een methodenaam en classnaam terug.

code:
1
2
3
4
5
6
7
    Public Shared Function CurrentMethod() As String

        Dim t As New System.Diagnostics.StackTrace
        Return t.GetFrame(1).GetMethod().DeclaringType().FullName() & "->" & _
                t.GetFrame(1).GetMethod().Name.ToString()

    End Function


Misschien dat dit doet wat jij wilt.

Garmin Fēnix 7 Pro | https://www.strava.com/athletes/30783039


Verwijderd

Topicstarter
whoami schreef op 14 maart 2004 @ 21:18:
Als er een fout optreedt, wordt er een Exception object gegooid, en dat object heeft een StackTrace property.
vanuit die stacktrace property krijg ik de volgende gegevens

Visual Basic:
1
at System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain() at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequest(HttpContext context) at System.Web.CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


dit is echter niet de functie waar mijn fout in op getreden is, die probeer ik te achterhalen. Maar ik maak anders wel een custom exception object, en daar voeg ik wel een function property aan vast als er geen andere oplossing is.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Die stacktrace geeft de stack weer op dat moment.

Echter, dat exception object heeft ook nog een andere property 'Source':
Gets or sets the name of the application or the object that causes the error

https://fgheysels.github.io/


Verwijderd

Topicstarter
heb ik nu ook even geprobeert, wat ik nu dus krijg is dit

Message: Er is een uitzondering van het type System.Web.HttpUnhandledException veroorzaakt.
Source: System.Web

het is een fout die uit mijn application_error komt, dus op zich kan dat exception object ook niet weten hoe de fout is ontstaan denk ik. Is er toch nog enige mogelijkheid om de laatste 10 functies op te roepen ofzo?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wel, die stacktrace geeft de methods weer die laatst werden uitgevoerd. Dat zijn natuurlijk niet alleen de methods die jij geschreven hebt, maar bevatten ook .NET methods.
Gets a string representation of the frames on the call stack at the time the current exception was thrown.

https://fgheysels.github.io/

Pagina: 1