Wie erhalten Sie den Wert der Parameter in den stacktrace
Bekomme ich Informationen über einen parameter, indem StackTrace mit so etwas wie dieses:
catch (Exception ex)
{
var st = new StackTrace(ex);
System.Reflection.ParameterInfo pi = st.GetFrame(0).GetMethod().GetParameters().First();
}
Möchte ich wissen, wie bekomme ich den Wert des Parameters. Beispiel:
Wenn meine Methode in stack-trace:
void MyMethod(object value)
Und der Anruf war wie:
MyMethod(10);
Ich will den Wert 10.
Wie Mach ich das?
möglich, Duplikat der Ist es möglich, die get-Parameter' Werte, die für jeden Rahmen in der Aufrufliste .NET
InformationsquelleAutor Jonny Piazzi | 2012-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten. Desto mächtiger ist der COM-API .NET Debugging. Zum Beispiel, Argumente und lokalen Variablen der Funktion im call-stack sind beide zugänglich von ICorDebugILFrame. Aber dies muss ausgeführt werden von einem separaten Prozess befestigt ist, um Ihren Prozess, wie Sie den debugger.
Für in-Prozess-die Introspektion, es gibt die Profiler-API, die finden Sie auch Informationen über die Funktion Argumente. Informationen über eine "Schatten-stacks".
Vielen Dank, dass mich wissen, ich habe updates der link zu der neuen Adresse der Informationen.
Beispiel bitte!
InformationsquelleAutor Ben Voigt
Nicht mit C#, außer wenn Sie einen sehr CLR - (patch -) version abhängige Lösung. Was aber funktioniert, ist das Anhängen von Windbg, um den Prozess, die Last sos.dll wechseln Sie zu Ihrem thread und geben
zeigen die verwalteten call-stack und die Parameter der Methode für die meisten Methoden. Dies ist auch unter dem debugger nicht narrensicher, weil durch inlining und JIT-Optimierungen das stack-layout ist sehr flexibel. Neben dieser werden einige Parameter möglicherweise nicht einmal zeigen, bis in der stack-Speicher, weil Sie weitergegeben werden über Register (die ist sogar noch häufiger unter der x64-Plattform).
Zur Beantwortung Ihrer ersten Frage. Nein, es ist nicht möglich, mit dem Ansatz, den Sie versuchen. Eine funktionierende Lösung wäre möglich, aber gar nicht tragbar. Einem verwalteten debugger kann teilweise abrufen, Ihre Argumente, aber es gibt keine 100% funktionierende Lösung (auch unter dem debugger).
InformationsquelleAutor Alois Kraus