Hej! Det går inte att göra (tillförlitligt) hmm låter inte bra!Ta reda på namnet av den funktion som man befinner sig i
Jag håller på att göra en felhantering och vill göra koden för själva felhanteringen i catch så enkelt och kopierings vänlig som möjligt.
Idag gör jag så att jag bubblar felen uppåt och för varje catch så lägger jag ett eget message som berättar vilken klass(me/this.ToString()) och funktions namnet, dessutom skickar jag med Exceptionet som ett innerException för att bubbla detta uppåt.
När felet kommer upp till översta lagret loopas alla innerexceptions igenom och läggs till i en array, där man även berättar i message att det är ett inner exception. Avlutningsvis läggs top felet till som inte är ett inner exception. På detta vis kan vi se exakt hur felet har bubblats.
Idag skriver man in funktionsnamnet för hand vilket är väldigt klumpigt då man lätt glömmer ändra detta när man kompierar en annan funktions catch.
ex:
Catch ex As Exception
Throw New Exception(Me.ToString() + "."myFunction", ex)
För att motverka detta vill jag alltså att detta fylls i automatiskt, detta har jag hittat en lösning på enligt följande:
Imports System.Diagnostics
Catch ex As Exception
Throw New Exception(Me.ToString() + "." + New StackTrace().GetFrame(1).GetMethod().Name, ex)
Jag har dock hört att StackTrace tar en hel del prestanda så frågan är om det är okay att använda på en felhantering på detta vis eller om det finns ett annat vis?Sv: Ta reda på namnet av den funktion som man befinner sig i
Så som du beskriver funkar bra i Debug mode, men i Release mode (dvs med optimering påslagen) så kan en frame bli bortoptimerad/inlinad, och i detta fall kommer din kod att peka fel, och felsökningsinfo som pekar fel är nästan värre än ingen info alls IMO.Sv:Ta reda på namnet av den funktion som man befinner sig i
Vi kommer att ha funktions namnet kvar i felhanteringen och frågan e om inte detta är bättre att använda stacktracen istället för att själv skriva in det förhand ändå?
Risken är ju ganska stor att man glömmer ändra funktions namnet förhand.
Sen kan man fråga sig om det gör någon skildnad att köra debug version hela tiden, det verkar ju inte som prestandan blir enormt mycket bättre i release?