Hvordan får værdi af parametre i stacktrace

Jeg kan få oplysninger om en parameter ved StackTrace at bruge noget som dette:

catch (Exception ex)
{
    var st = new StackTrace(ex);

    System.Reflection.ParameterInfo pi = st.GetFrame(0).GetMethod().GetParameters().First();
}

Jeg vil vide, hvordan jeg får værdien af parameter. Eksempel:

Hvis min metode i stack trace var som:

void MyMethod(object value)

Og det var som:

MyMethod(10);

Jeg ønsker at få værdien 10.
Hvordan gør jeg det?

OriginalForfatteren Jonny Piazzi | 2012-05-26

2 svar

  1. 9

    Der er to måder. Den mere kraftfulde er COM API for .NET Debugging. For eksempel, argumenter og lokale variable i funktionen i call stack er begge tilgængelige fra ICorDebugILFrame. Men dette skal køres fra en separat proces, der er knyttet til din proces som debugger.

    Til in-proces introspektion, der er Profiler API ‘ et, som også kan finde oplysninger om funktion argumenter. Kig på de oplysninger om “skygge-stakke”.

    fyi, dit andet link er død
    Tak for at lade mig det vide, jeg har opdateringer linket til den nye adresse oplysninger.
    Eksempel bemærk!

    OriginalForfatteren Ben Voigt

  2. 3

    Ikke med C#, undtagen hvis du er ved at skabe et stærkt CLR (patch) version afhængig løsning. Men hvad betyder arbejde er at knytte Windbg til din proces, belastning sos.dll skift til din tråd og skriv

    !ClrStack -p

    at vise det lykkedes opkald stak, og den metode parametre for de fleste metoder. Dette er endda under fejlsøgeren ikke idiotsikker, fordi på grund af at indlejre og JIT optimeringer stakken layout er meget fleksibel. Ud over dette er der nogle parametre, som måske ikke engang dukke op i stakken hukommelse, fordi de er videregivet via registre (som er endnu mere udbredt i henhold til x64-platform).

    At svare på dit første spørgsmål. Nej, det er ikke muligt med den tilgang, du forsøger. En arbejdsgruppe løsning ville være muligt, men ikke på alle bærbare. En administreret debugger delvist kan hente dine argumenter, men der er ingen 100% i orden-løsning (selv under de debugger).

    OriginalForfatteren Alois Kraus

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *