Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

32.10. TraceOptions.Callstack en LogicalOperationStack

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

32.10.1. TraceOptions.Callstack

Om te weten hoe men terecht is gekomen in de code waar de boodschap verzonden is, kan men gebruik maken van TraceOptions.Callstack.

De listener maakt in dat geval gebruik van de Environment.StackTrace property.
Visual Basic 2012 Broncode - Codevoorbeeld 805
Imports System.Diagnostics
#Const TRACE = True
Class ExampleWithListenerTraceOutputOptionCallStack
    Public Shared Sub Main()
        Dim traceSource As New TraceSource("myTraceSource", _
                                           SourceLevels.All)
        '
        traceSource.Listeners.Clear()
        '
        Dim traceListener As New ConsoleTraceListener
        traceListener.TraceOutputOptions = TraceOptions.Callstack
        '
        traceSource.Listeners.Add(traceListener)
        '
        traceSource.TraceEvent(TraceEventType.Information, 1, "Message 1")
        '
        Console.ReadLine()
    End Sub
End Class
Op de console verschijnt mogelijks het volgende :
Console Application Output
myTraceSource Information: 1 : Message 1
    Callstack=   at System.Environment.GetStackTrace(Exception e, Boolean needFi
leInfo)
   at System.Environment.get_StackTrace()
   at System.Diagnostics.TraceEventCache.get_Callstack()
   at System.Diagnostics.TraceListener.WriteFooter(TraceEventCache eventCache)
   at System.Diagnostics.TraceListener.TraceEvent(TraceEventCache eventCache, St
ring source, TraceEventType eventType, Int32 id, String message)
   at System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType, Int32
id, String message)
   at TestTraceSource.ExampleWithListenerTraceOutputOptionCallStack.Main() in C:
\test.vb:line 262
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySec
urity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, C
ontextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
Nogal veel informatie - te veel informatie - wordt weergegeven.  Doorgaans zijn we enkel geïntresseerd in de calling method van de TraceEvent method.
Hier bijvoorbeeld kunnen we zien dat de Main method deze heeft aangeroepen.  De rest van de informatie is bijna altijd overbodig.

We zouden zelf de huidige callstack kunnen ontleden, en in tekstvorm deze als traceboodschap doorgeven aan de TraceEvent method :
Visual Basic 2012 Broncode - Codevoorbeeld 806
Imports System.Diagnostics
#Const TRACE = True
Class ExampleStackTrace
    Private Shared traceSource As TraceSource
    Public Shared Sub Main()
        traceSource = New TraceSource("myTraceSource", _
                                      SourceLevels.Information)
        traceSource.Listeners.Clear()
        traceSource.Listeners.Add(New ConsoleTraceListener)
        '
        Method1()
        '
        Console.ReadLine()
    End Sub
    Public Shared Sub Method1()
        Method2()
    End Sub
    Public Shared Sub Method2()
        Dim callstack As String
        Dim currentStackTrace As New System.Diagnostics.StackTrace
        Dim stackFrames As StackFrame() = currentStackTrace.GetFrames()
        Dim index As Integer = -1
        Do
            index += 1
            Dim method As Reflection.MethodBase = stackFrames(index).GetMethod()
            callstack &= method.ToString() & Environment.NewLine()
        Loop Until stackFrames(index).GetMethod().Name = "Main"
        traceSource.TraceEvent(TraceEventType.Information, 1, callstack)
    End Sub
End Class
Op de console verschijnt het volgende :
Console Application Output
myTraceSource Information: 1 : Void Method2()
Void Method1()
Void Main()
Woord Void wijst er hier op dat het gaat om procedures (Subs).

32.10.2. TraceOptions.LogicalOperationStack

Om meer een eigen stack van operations te tracen kan je gebruik maken van de Trace.CorrelationManager en de TraceOptions.LogicalOperationStack van de listeners :
Visual Basic 2012 Broncode - Codevoorbeeld 807
Imports System.Diagnostics
#Const TRACE = True
Class ExampleWithListenerTraceOutputOptionLogicalOperationStack
    Private Shared traceSource As TraceSource
    Public Shared Sub Main()
        traceSource = New TraceSource("myTraceSource", SourceLevels.All)
        traceSource.Listeners.Clear()
        '
        Dim traceListener As TraceListener = New ConsoleTraceListener
        traceListener.TraceOutputOptions = TraceOptions.LogicalOperationStack
        traceSource.Listeners.Add(traceListener)
        '
        Trace.CorrelationManager.StartLogicalOperation("Initial Operation")
        traceSource.TraceEvent(TraceEventType.Information, 1, "Initial Message")
        MethodX()
        Trace.CorrelationManager.StopLogicalOperation()
        '
        Console.ReadLine()
    End Sub
    Public Shared Sub MethodX()
        Trace.CorrelationManager.StartLogicalOperation("Operation X")
        traceSource.TraceEvent(TraceEventType.Information, 1, "Message X")
        MethodY()
        Trace.CorrelationManager.StopLogicalOperation()
    End Sub
    Public Shared Sub MethodY()
        Trace.CorrelationManager.StartLogicalOperation("Operation Y")
        traceSource.TraceEvent(TraceEventType.Information, 1, "Message Y")
        Trace.CorrelationManager.StopLogicalOperation()
    End Sub
End Class
Op de console verschijnt het volgende :
Console Application Output
myTraceSource Information: 1 : Initial Message
    LogicalOperationStack=Initial Operation
myTraceSource Information: 1 : Message X
    LogicalOperationStack=Operation X, Initial Operation
myTraceSource Information: 1 : Message Y
    LogicalOperationStack=Operation Y, Operation X, Initial Operation
Merk op dat de LogicalOperationStack in omgekeerde volgorde weergeeft welke operatie door welke andere is aangeroepen.

Hier wordt de LogicalOperationStack opgevuld met operaties die corresponderen met methodcalls, maar dat hoeft uiteraard niet persé zo te zijn.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.