vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB2008, VB201030.10.12
Methode zum Debuggen während der Runtime

Es wird eine einfach anwendbare Methode zum Debuggen während der Runtime, insbesondere auf Fremdrechnern) gezeigt.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  5.825 
ohne HomepageSystem:  Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Manchmal hat man das Problem, dass man beim Testen seiner Anwendung auf einem Fremdrechner (also evtl. beim Kunden) nicht einfach an Debug-Informationen kommt. Um das zu ermöglichen/vereinfachen habe ich folgende Vorgehensweise entwickelt.

Ich habe meiner Anwendung eine Form zugefügt "myDebug.frm". Auf ihr befinden sich

  • eine Listbox (Dock = Fill)
  • ein Toolstrip (Dock = Bottom) mit zwei Buttons
  • erster Button "alle löschen" für's Löschen aller ListboxItems
  • zweiter Button "kopieren in die Zwischenablage" zum Kopieren aller oder der selektierten Items ins Clipboard

Dazu hier der Code für die Form und Controls:

Public Class myDebug
 
  Private Sub myDebug_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.Text = "Debuggen von: " + My.Application.Info.AssemblyName
    ListBox1.BackColor = setColorBrightness(ToolStrip1.BackColor, 24)
    ListBox1.Items.Clear()
  End Sub
 
  Private Sub ListBox1_MouseDown(sender As Object, e As MouseEventArgs) _
    Handles ListBox1.MouseDown
 
    If MOUSEEVENTF_RIGHTDOWN Then ListBox1.SelectedIndex = -1
  End Sub
 
  Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) _
    Handles ToolStripButton1.Click
 
    ListBox1.Items.Clear()
  End Sub
 
  Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) _
    Handles ToolStripButton2.Click
 
    Dim t As String, i As Short
    If ListBox1.Items.Count = 0 Then Exit Sub
    If ListBox1.SelectedItems.Count > 0 Then
      For i = 0 To ListBox1.SelectedItems.Count - 1
        t += ListBox1.SelectedItems(i) + vbCrLf
      Next 
    Else
      For i = 0 To ListBox1.Items.Count - 1
        t += ListBox1.Items(i) + vbCrLf
      Next 
    End If
    My.Computer.Clipboard.SetText(t)
  End Sub
 
End Class

Für das Eintragen von Debug-Informationen in die Listbox gibt es die Funktion "debugForm" (in einem Modul unterbringen):

''' <summary>
''' Funktion zum Eintragen von Debug-Informationen
''' </summary>
''' <param name="theVar">ein Variablenwert als String</param>
''' <param name="addNo">soll DebugInfo in neue Zeile oder an vorhergehende angehängt werden</param>
Public Sub debugForm(theVar As String, Optional addNo As Boolean = False)
  If addNo Then
    myDebug.ListBox1.Items(dhDebug.ListBox1.Items.Count - 1) += If(IsNothing(theVar), "~~~", theVar)
  Else
    myDebug.ListBox1.Items.Add(If(IsNothing(theVar), "~~~", theVar))
  End If
End Sub

und als Zusatzfunktion "WhoCalledMe", die dazu dient, die Prozedur zu ermitteln, in der der Aufruf von "debugForm" erfolgt:

''' <summary>
''' Funktion zum Ermitteln des namens der aufrufenden Prozedur
''' </summary>
Public Function WhoCalledMe() As String
  Dim st As StackTrace = New StackTrace()
  Dim sf As StackFrame = st.GetFrame(1)
  Dim mb As MethodBase = sf.GetMethod()
  ' Console.WriteLine("I was called by: " & mb.Name) ' Displays "GetMyName"
  Return mb.Name
End Function

Achtung- für diese Funktion ist im Modul notwendig zu vereinbaren:

Imports System.Reflection, System.Diagnostics

Nun zur praktischen Anwendung.
An der Stelle im Programm, wo man die DebugInfos braucht, schreibt man bspw.

debugForm("Methode: " + WhoCalledMe())

womit man in der Listbox eine Zeile erhält, die den Prozedurnamen derjenigen Prozedur erhält, in der eben diese Zeile steht

debugForm("meinZähler: " + meinZähler.ToString)

um den Wert der Variablen in eine ListboxZeile ein zu tragen

debugForm(vbTab + "PC: " + myPCname, True)

um den PC-Namen, den man vorher ermittelte, an die zuletzt geschriebene Zeile in der Listbox anzufügen.

oder auch etwa

debugForm("* Userdaten")
debugForm(theUserID + vbTab + theUserRights + vbTab + thePassword)

wobei hier die Variablen schon Strings sind.

Tipp im Tipp:
Man kann auch eine Stoppuhr laufen lassen und an geeigneten Stellen die Werte in die Listbox eintragen...

Man erhält bei dieser Vorgehensweise in der Listbox eine chronologische Abfolge des Programmablaufs.
In der Anwendung selbst muss man nur dafür sorgen, dass an geeigneter Stelle die Form "myDebug" mittels myDebug.Show() aufgerufen wird.
Ich mache es bspw. so, dass ich in meiner Anwendung einen Startparameter auswerte, der die folgende Form hat: /debugForm=myDebug
Wenn dieser Parameter gesetzt ist, wird die Debugform gezeigt oder nicht.

Dieser Tipp wurde bereits 5.825 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel