Ist es möglich, Parameter Werte für jeden Frame in Call-Stack in .NET zu erhalten

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

Frage

Ich spreche über verwaltete .NET-Code. Wenn wir jedes Programm und befestigen VS, um es ausführen können wir Parameter Werte für jede Methode in Call-Stack sehen. Ich möchte eine Logging-Lösung zu schaffen, die für jede Methode in Call-Stack alle Parameter Werte protokolliert. Eigentlich muss ich diese Informationen, falls eine Ausnahme auftritt.

Ich weiß, es ist möglich, mit Profilerstellungs-API. Aber ich frage mich, ist es möglich, mit nur verwalteten Code?

UPDATE: Ok, wahrscheinlich mit reinen .NET es ist unmöglich. Dann mit einer Art von nicht verwalteten Code sein kann ... ist der Punkt, dies zu tun, aus Anwendung selbst. Eine Anwendung im Falle einer Ausnahme könnte eine Bibliothek nennen (kann nicht verwaltet werden), die Werte in Call-Stack Informationen über Methoden zurückgibt. Nur Gedanken ...

War es hilfreich?

Lösung

Parameter-Werte werden nicht in StackFrame- Instanz gespeichert. In der Tat sind sie nicht aufgezeichnet / haupt angemeldet, es sei denn, Sie wählen, um es explizit zu tun.

Eine offensichtliche Art und Weise Thesen Werte zu protokollieren ist AOP zu verwenden. Es würde bedeuten, sicherlich eine kostengünstige, aber in Verbindung mit einem Logging-Framework und der rechten Protokollebene kann es eine Alternative sein. Sie können auch nur einige Arten / Methoden in der Basiscode zum Instrument wählen, wo Ausnahmen sind eher geworfen werden. Ich würde wahrscheinlich für Postsharp seine statische Weberei Fähigkeiten wählen, um Protokoll Anrufe auszusenden.

Wie auch immer, es ist weit davon entfernt eine ideale Lösung, aber ich habe Angst, daß Sie nicht viele Möglichkeiten haben, wenn Sie in der verwalteten Welt stecken.

Andere Tipps

Ihre beste Möglichkeit ist wahrscheinlich die erforderliche Trace-Code in den einschlägigen Methoden einzusetzen. Auf diese Weise können Sie Trace-Hörer und Dump-Werte an, wenn nötig.

Ich weiß, es ist nicht das, was Sie für Fragen, aber es ist eine Möglichkeit, die Daten zu erhalten.

Alternativ können Sie die Anwendung debuggen mit WinDbg. Die! Clstack /! Dso Befehle können Sie Parameter und Stapelobjekte inspizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top