Methodennamen anzeigen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    Methodennamen anzeigen

    yo Leute,

    gibt es eigentlich eine Möglichkeit den Methodennamen der aktuellen Methode ausfindig zu machen?
    Bsp.:

    VB.NET-Quellcode

    1. Sub TestSub123()
    2. debug.print(GetMethodName.toString) ' ---> TestSub123
    3. End Sub


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Es geht um eine Logging Sache wo ich immer gerne den Methodennamen darin stehen habe um den Fehler leichter zu finden.
    Und den jedes mal per Hand zu verändern wird oft übersehen und dann bringt das ganze dann ned viel.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Du kannst doch mit Console.Writeline in die VS2010 Console reinschreiben.
    Ich hab das selber noch nie kombiniert mit Methodenname aber versuchen kannst es mal.
    Musst dann in VS unter dem Reiter "Ausgabe" schauen.


    Edit:

    Vielleicht so:

    VB.NET-Quellcode

    1. Console.WriteLine(Methodenname.ToString)
    Paradoxon oO
    WIE und WIE :D

    Und was ist wenn du einfach nen String einfügst der den Methoden namen ausgibt?

    VB.NET-Quellcode

    1. Console.WriteLine("######## Methode einloggen ##########")

    damit du erkennen kannst wo er sich gerade befindet
    Genau das will eben vermeiden.
    Weil wenn das zB kopiert wird (aus ein anderen Funktion/Sub) und vergessen wird zu korrigieren oder man später den Methodennamen ändert und vergisst es anzupassen hat das ganze System nicht wirklich Sinn.

    Derzeit hab ich ja so nur ich will es eben selbst angezeigt bekommen ohne mich darum kümmern zu müssen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Unter C++ gibt es ein Macro, das genau das macht: __FUNCTION__
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich hab gerade mal VS gestartet und habe das versucht mir dem Methodennamen zurückgeben zu lassen:

    VB.NET-Quellcode

    1. Console.WriteLine("##########" & btnComplete.ToString &"##########")

    Kompeliert und in die Konsole geschaut:
    ("######## System.Windows.Controls.Button: Abschließen ##########")


    @Rod

    Das selbe gilt auch für PHP
    Schau dir mal den Reflection-Namespace an, vielleicht findest du etwas. Für mich wäre es evtl. auch ganz nützlich in meinem ExceptionLog.

    Andererseits: Du weist ja ungefähr was passiert. Ich verwende NLog, dort kann ich mir sagen lassen, von wo aus geloggt wird (Klassen-Namen), vereinfacht es ein bisschen.
    Ansonsten kannst du dir ja bei Exceptions einen Teil der Exception mitloggen, wo der CallStack drinne steht. Wäre vielleicht noch besser am Ende, wobei das dann auch der Kunde sieht - sofern er was damit anfangen kann ^^
    __FUNCTION__ unter .NET

    VB.NET-Quellcode

    1. Imports System.Diagnostics
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. MessageBox.Show(__FUNCTION__)
    5. End Sub
    6. Public Function __FUNCTION__() As String
    7. Dim st As New StackTrace
    8. Return st.GetFrame(1).GetMethod().Name
    9. End Function
    10. End Class
    :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany:
    Das geht auch kürzer:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. MsgBox(Reflection.MethodInfo.GetCurrentMethod.Name) 'Output: "Button1_Click"
    3. 'oder:
    4. MsgBox(Reflection.MethodInfo.GetCurrentMethod.ToString) 'Output: "Void Button1_Click(System.Object, System.EventArgs)"
    5. End Sub

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Es ist bei der Fehlersuche hilfreich, wenn man genau weiss, welche Methode durch welche aufgerufen wurde. In diesem Fall lässt man alle Frame vom Stack ausgebe. Beispiel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Try
    4. Me.Test1()
    5. Catch ex As Exception
    6. Dim s As New StackTrace(ex, True)
    7. For index = 0 To s.FrameCount - 1
    8. Debug.Print("Frame: '{0}', Method: '{1}', FileName: '{2}', LineNumber; '{3}'", index, s.GetFrame(index).GetMethod.Name, s.GetFrame(index).GetFileName, s.GetFrame(index).GetFileLineNumber)
    9. Next
    10. End Try
    11. End Sub
    12. Private Sub Test1()
    13. Try
    14. Me.Test2()
    15. Catch ex As Exception
    16. Throw
    17. End Try
    18. End Sub
    19. Private Sub Test2()
    20. Try
    21. Me.Test3()
    22. Catch ex As Exception
    23. Throw
    24. End Try
    25. End Sub
    26. Public Sub Test3()
    27. Throw New Exception
    28. End Sub
    29. End Class
    @xtts02:

    Du hast recht, aber du machst es dir doch etwas zu kompliziert...
    System.Exception hat bereits eine Propery StackTrace.

    Diese kann man ausgeben:

    VB.NET-Quellcode

    1. ...
    2. Catch ex As Exception
    3. Debug.Print(ex.StackTrace)
    4. ..
    Das ist meine Signatur und sie wird wunderbar sein!
    In diesem Fall lässt man alle Frame vom Stack ausgebe.


    Genau das erreicht man mit der Ausgabe von ex.Stacktrace.
    (Mir ist auch klar das ex.Stacktrace vom Typ String ist, sonst würde ich Sie ja nicht direkt ausgeben)


    Wenn man jedoch gezielt nach nur einer bestimmten Information sucht,


    Das ist halt was anderes.
    Das ist meine Signatur und sie wird wunderbar sein!

    fichz schrieb:

    Genau das will eben vermeiden.
    Weil wenn das zB kopiert wird (aus ein anderen Funktion/Sub) und vergessen wird zu korrigieren oder man später den Methodennamen ändert und vergisst es anzupassen hat das ganze System nicht wirklich Sinn.

    Kagurame schrieb:

    so hätte er immer den Methoden-namen seiner Logging-Methode. Er muss zurückgehen im Stack, so wie es Rod tut.

    Er wollte das eh in jede Funktion kopieren, also funktioniert es so.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !