Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
StackFrame manchmal NULL
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

StackFrame manchmal NULL

beantworten | zitieren | melden

Hallo zusammen,

wir habe eine Loggingkomponnente im Einsatz welche sich den Methodennamen und Klassennamen des aufrufers nimmt aus dem StackFrame

var method = new StackFrame(1).GetMethod();
		var classType = method.ReflectedType;

Wir nutzen diese in einem Webprojekt gehostet auf dem IIS
Seit neustem fliegen wir hier mit einer NULL Reference Exception raus.
Das schlimme ist, wir sehen ja dadurch keine Logeinträge und Lokal können wir das Problem nicht nachstellen.

Hat jmd eine Idee woran es liegen könnte ?

P.S. NET 4.5 mit den Attributen dürfen wir nicht nutzen

Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ahrimaan am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Je nachdem wo der Fehler fliegt steht halt kein StackFrame zur Verfügung. Der Fehler kann ja auch zB durch den Handler entstehen.

Typischer Fall dafür, dass man einfach auch auf null prüfen sollte...
Zitat
P.S. NET 4.5 mit den Attributen dürfen wir nicht nutzen
Wer kommt denn auf diese Regel-Schnapsidee (sofern die Filter meinst), oder meinst Du die neuen Caller-Attribute?
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 656

beantworten | zitieren | melden

Mein Tipp wäre eher, dass method gleich null ist @Thread-Titel. Oder hast du schonmal irgendwo var foo = new Bar(); geschrieben, wobei foo in der Zeile danach null war? :)
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

beantworten | zitieren | melden

Das schlimme ist, der StackFrame steht zur Verfügung, es wird keine Exception geworfen, es wird nur was normales geloggt. Bisher hat es immer funktioniert, auch auf den Test und Produktionsservern, auf den Produktionsservern läuft es bisher
Es muss also einen bestimmten Grund haben

Und ja ich meine die CallerNameAttribute.
Das 4.5 dürfen wir im Bankenumfeld noch nicht nutzen ;-)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ahrimaan am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Ja der Grund ist: Du prüfst nicht auf null.
Prüf alles auf null, dann kennst Du die Ursache.

So ist das nur stupides Raten und bringt keinen weiter.
Und nein: im IIS-Umfeld steht der Stacktrace nicht überall zur Verfügung.

BhaaL hat zudem auch nicht unrecht.

PS: ich kenne Software mit .NET 4.5 im Bankenumfeld, die sehr wohl die Caller-Informationen nutzen.
Ich würde es also nicht pauschalisieren sondern einfach sagen "wir wollen es aktuell nicht nutzen".
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

beantworten | zitieren | melden

Mittlerweile bin ich doch weiter : Es scheint, dass der Code Optimizer beim compilen alles Inline macht. Dadurch steht der StackFrame nicht zuer Verfügung.

[MethodImpl(MethodImplOptions.NoOptimization)]

Scheint erstmal zu wirken.

Edit für evtl. andere leute:

Lasst die Finger von solchen Optimierungen. Ein Code sollte nie vom StackeFrame abhängig sein.
Ich werde unsere Loggingkomponnente umbauen und mit strings arbeiten.

grüße
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Anders ausgedrückt: man sollte wissen, was man tut.
Denn gerade AgressiveInlining bei .NET 4.5 kann enorme Performance-Potenziale bei Schleifen und If-Abfragen bewirken - vorausgesetzt man verwendet es korrekt, wissentlich und mit Bedacht.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers