2010-04-21 5 views
5

Ich habe eine tote einfache Einliner-Methode, die ich nicht in der Stack-Trace sehen will: Ist das möglich? Vielleicht mit einem Attribut markieren?C#: Wie versteckt man eine Methode aus der Stack-Trace?

Nur um zu verdeutlichen, ich versuche nicht, die Spur zu drucken, oder erneut zu starten, oder Auto-Schritt durch im Debugger haben. Ich möchte, dass die Methode von Anfang an nicht in der Ablaufverfolgung angezeigt wird, da die Ablaufverfolgung dann von Code von Dritt-Anbieter behandelt wird. Ich will Kontrolle zur Laufzeit, ich bin nicht daran interessiert, zu debuggen. Ich sage das, weil das meiste, was ich auf StackTrace gelesen habe, über diese Themen zu sein scheint.

+0

Wenn es ein einfacher Einliner ist, dann ist es automatisch. Der JIT-Optimierer wird es inline. Aber nicht während Sie den Debugger angeschlossen haben. –

+0

Hans, siehe meinen Kommentar zu Steven's Antwort. – benblo

+0

Vergessen Sie nicht, Ihre Lieblingsantwort zu markieren ;-) – Steven

Antwort

2

Dies kann nur durchgeführt werden, wenn Ihre Methode inline ist. Entweder tut dies der JIT, oder Sie tun es selbst (ändern Sie den Code). Der JIT ist jedoch ziemlich konservativ bezüglich der Inlining-Methoden und praktisch nur dann, wenn die Methode sehr klein ist oder wenn die Methode in einer Schleife verwendet wird.

+0

Hm ... um ehrlich zu sein, ich bezweifle es: Selbst wenn es inline ist würde der StackTrace irgendwie nicht den Überblick behalten? Und es wird in der Praxis nicht ausgecheckt, da meine Methode sowohl im Debug- als auch im Release-Modus vorhanden ist und es sich nur um einen einzeiligen Wrapper handelt. – benblo

+1

Nein. Wenn eine Methode inline ist, ist sie wirklich weg. Es gibt daher keinen Methodenaufruf, ein Stackwalk wird ihn nicht offenbaren. Da ein Stack-Trace mit einem Stack-Walk erstellt wird, zeigt der Stack-Trace Ihre Methode nicht mehr an. – Steven

-1

Wie es in Antwort auf andere Frage Most Useful Attributes gesagt wird, müssen Sie System.Diagnostics.DebuggerHidden Attribut für Ihre Methode angeben.

+0

Leider gilt das hier nicht, wie der Name andeutet (und die Dokumentation sagt), es ist nur ein Debugger-Attribut, es liegt am Debugger, die markierten Methoden herauszufiltern, aber die Methode ist immer noch im Stack-Trace registriert Ort. Mein Kontext ist nicht Debug-Zeit, dies ist für Unity (Game Engine), die den gesamten Stapel von Protokollen oder Ausnahmen ausgibt, so dass Unity die Methoden absichtlich herausfiltern müsste. Ich fürchte, was ich eigentlich machen wollte (nicht im Stack-Trace zu registrieren) ist einfach unmöglich. – benblo

Verwandte Themen