Announcement

Collapse
No announcement yet.

Abfrage von Methodenparametern durch Reflektion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage von Methodenparametern durch Reflektion

    Hallo,

    ich möchte gern verschiedene Informationen zu einer aufrufenden Methode anzeigen.

    Aktuell sieht das Ganze so aus:

    Code:
    public void Show() {
      StackTrace stackTrace = new StackTrace();
      MethodBase method1 = stackTrace.GetFrame(1).GetMethod();
      MessageBox.Show(method1.Name);
    }
    Mit dem Befehl GetGenericArguments() kann ich mir außerdem eine Liste der Methodenparameter holen.
    Aber gibt es eigentlich auch eine Möglichkeit, die Zustände der einzelnen Parameter abzufragen, d.h. welche Werte beim Aufruf an die Methode übergeben wurden?

    Vielen Dank und viele Grüße

  • #2
    http://www.csharp-examples.net/reflection-examples/


    StackTrace stackTrace = new StackTrace sicher nicht mit einer neuen Instanz einer Klasse. Woher sollte diese jemand aufgerufen haben?

    GetGenericArguments() vs. Reflection einer Klasse und deren Property usw.
    Christian

    Comment


    • #3
      Nein der Stack enthält nur den Stapel der aufgerufenen Methoden aber nicht deren Zustände wie Parameterwerte etc. Solche Details wirst du vermutlich nur über einen Debuggerhook, mit den entsprechenden Perrformancekosten, bekommen.

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        StackTrace stackTrace = new StackTrace sicher nicht mit einer neuen Instanz einer Klasse. Woher sollte diese jemand aufgerufen haben?
        Also das StackTrace-Objekt enthält aber alle Methodenaufrufe.

        Originally posted by Christian Marquardt View Post
        GetGenericArguments() vs. Reflection einer Klasse und deren Property usw.
        Das verstehe ich jetzt nicht ganz. Ich möchte ja nicht eine komplette Klasse reflektieren, mich interessieren ja nur die Parametertypen einer bestimmten Methode. Die Methode hole ich mir über GetFrame und die Parameterliste über GetGenericArguments. Insofern passt das eigentlich alles sehr gut.

        @Ralf: Schau ich auf jeden Fall mal an. Wenn das Programm dann doch zu stark ausgebremst wird, muss ich mir halt was anderes einfallen lassen.

        Viele Grüße

        Comment


        • #5
          Hallo,

          du kannst versuchen über das Profiler-API die Werte auszulesen. Siehe Object Inspection in the Profiling API.

          Wie Ralf schon angesprochen hat gibts auch den Weg übers Debugging. Dazu ist aber ein eigenständiger Prozess nötig der sich an den zu debuggenden Prozess ranhängt - so wie das *.vshost.exe auch macht. Siehe hierzu ICorDebugILFrame Interface

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Nicht das es mit einem DebuggerHook einfacher wäre. Egal ob Profiling API oder Debugger Hook da kommen viele lustige Fragen auf

            Wann (in welchem Zustand) loggt man einen out oder ref Parameter?
            Wenn man sagt man möchte den Zustand am Ende der Methode was loggt man im Exception Fall?
            IQueryable? Enumerieren um das zu loggen? Vielleicht wäre der im folgenden Code nie enumeriert worden.
            Streams? Was ist wenn der nicht seekable ist?

            Wenn man nicht über hunderte Spezialfälle stolpern möchte kann man eigentlich nur die primitiven Typen loggen und läßt alle anderen in Frieden bzw. loggt nur die Referenz. Erst recht wenn man das von außerhalb des Frameworks machen mußt denn sowohl die Debugger als auch die Profiling API sind unmananaged Geschichten.

            Comment

            Working...
            X