OBS/Adminhilfe/DebugTimer: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{ZugriffOBS}} Die Klasse ''TMyDebugTimer'' aus ''G_Debug'' soll dazu dienen, die Zeiten von Funktionen zu messen und so Hinweise für mögliche Optimierungen zu …“) |
Nimz (Diskussion | Beiträge) |
||
| Zeile 4: | Zeile 4: | ||
Es wird immer eine Klassenvariable des Typs ''TMyDebugTimer'' benötigt. Je nach Verwendung kann die Instanz selbst mit ''DebugTimerInit'' erstellt werden oder sie wird in DebugTimerStart automatisch erzeugt. '''Wichtig''' ist am Ende die Instanz mit ''MyFreeAndNil'' sauber zerstört und der Speicher wieder freigeben wird. Es ist daher ratsam mit try/except oder try/finally zu arbeiten. Standardmäßig werden die Zeiten im Debug-Ordner in der Datei ''DebugTimer.log'' gespeichert. Die Speicherung erfolgt mit dem Befehlt ''FAppendDebug''. Es wird also maximal sechs Dateien mit je etwa einem Gigabyte geben. Es ist zudem möglich die Speicherung der Zeit in der Log-Datei während der Ausführung zu beeinflussen. Entweder erfolgt die durch Pointer auf globale Variablen oder mit lokalen Werten. Sollen zwischendurch Infos ebenfalls gespeichert werden, ist dies mit ''DebugTimerLine'' möglich. | Es wird immer eine Klassenvariable des Typs ''TMyDebugTimer'' benötigt. Je nach Verwendung kann die Instanz selbst mit ''DebugTimerInit'' erstellt werden oder sie wird in DebugTimerStart automatisch erzeugt. '''Wichtig''' ist am Ende die Instanz mit ''MyFreeAndNil'' sauber zerstört und der Speicher wieder freigeben wird. Es ist daher ratsam mit try/except oder try/finally zu arbeiten. Standardmäßig werden die Zeiten im Debug-Ordner in der Datei ''DebugTimer.log'' gespeichert. Die Speicherung erfolgt mit dem Befehlt ''FAppendDebug''. Es wird also maximal sechs Dateien mit je etwa einem Gigabyte geben. Es ist zudem möglich die Speicherung der Zeit in der Log-Datei während der Ausführung zu beeinflussen. Entweder erfolgt die durch Pointer auf globale Variablen oder mit lokalen Werten. Sollen zwischendurch Infos ebenfalls gespeichert werden, ist dies mit ''DebugTimerLine'' möglich. | ||
=besondere Datentypen= | =besondere Datentypen= | ||
'''pBoolean''': Pointer auf eine boolsche Variable | '''pBoolean''': Pointer auf eine boolsche Variable<br /> | ||
'''TDebugSwitch''': eigene Enummeration, welche die Werte ''dsGlobal'' (globale Variablen über Pointer), ''dsOff'' und ''dsOn'' annehmen kann. Sie dient zum Steuern der Aktivierung des Schreibens der Log-Datei. | '''TDebugSwitch''': eigene Enummeration, welche die Werte ''dsGlobal'' (globale Variablen über Pointer), ''dsOff'' und ''dsOn'' annehmen kann. Sie dient zum Steuern der Aktivierung des Schreibens der Log-Datei.<br /> | ||
'''TRecDebugTimer''': Record mit drei Variablen zum Speichern der Zeit. Wird nur intern in der Klasse ''TMyDebugTimer'' als Array verwendet und mus von außen nicht gesetzt werden. | '''TRecDebugTimer''': Record mit drei Variablen zum Speichern der Zeit. Wird nur intern in der Klasse ''TMyDebugTimer'' als Array verwendet und mus von außen nicht gesetzt werden.<br /> | ||
'''TMyDebugTimer''': Die Klasse zur Zeiterfassung. | '''TMyDebugTimer''': Die Klasse zur Zeiterfassung.<br /> | ||
=Beispiele= | =Beispiele= | ||
Im aktuellen Source finden sich Beispiele in ''G_Backup'', ''G_Http'' oder ''lib_Shop_Interface'' und ''lib_Shop_XTCModified''. | Im aktuellen Source finden sich Beispiele in ''G_Backup'', ''G_Http'' oder ''lib_Shop_Interface'' und ''lib_Shop_XTCModified''. | ||
Version vom 15. April 2016, 15:39 Uhr
Dies ist eine zugriffsgeschützte Seite.
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
Die Klasse TMyDebugTimer aus G_Debug soll dazu dienen, die Zeiten von Funktionen zu messen und so Hinweise für mögliche Optimierungen zu erhalten. Die Zeiten können in einer Textdatei gespeichert werden.
Verwendung
Es wird immer eine Klassenvariable des Typs TMyDebugTimer benötigt. Je nach Verwendung kann die Instanz selbst mit DebugTimerInit erstellt werden oder sie wird in DebugTimerStart automatisch erzeugt. Wichtig ist am Ende die Instanz mit MyFreeAndNil sauber zerstört und der Speicher wieder freigeben wird. Es ist daher ratsam mit try/except oder try/finally zu arbeiten. Standardmäßig werden die Zeiten im Debug-Ordner in der Datei DebugTimer.log gespeichert. Die Speicherung erfolgt mit dem Befehlt FAppendDebug. Es wird also maximal sechs Dateien mit je etwa einem Gigabyte geben. Es ist zudem möglich die Speicherung der Zeit in der Log-Datei während der Ausführung zu beeinflussen. Entweder erfolgt die durch Pointer auf globale Variablen oder mit lokalen Werten. Sollen zwischendurch Infos ebenfalls gespeichert werden, ist dies mit DebugTimerLine möglich.
besondere Datentypen
pBoolean: Pointer auf eine boolsche Variable
TDebugSwitch: eigene Enummeration, welche die Werte dsGlobal (globale Variablen über Pointer), dsOff und dsOn annehmen kann. Sie dient zum Steuern der Aktivierung des Schreibens der Log-Datei.
TRecDebugTimer: Record mit drei Variablen zum Speichern der Zeit. Wird nur intern in der Klasse TMyDebugTimer als Array verwendet und mus von außen nicht gesetzt werden.
TMyDebugTimer: Die Klasse zur Zeiterfassung.
Beispiele
Im aktuellen Source finden sich Beispiele in G_Backup, G_Http oder lib_Shop_Interface und lib_Shop_XTCModified.
DebugTimerInit
Parameter: pBoolean, pBoolean, string='', string=''
Verwendung: Die ersten beiden Parameter müssen gesetzt werden. Da es sich um Pointer handelt ist darauf zu achten, dass Variablen mit einem @ angegeben werden. Die Pointer sind für die Speicherung wichtig. Der erste Pointer entscheidet dabei, ob die Speicherung in der angegebenen Log-Datei erfolgen soll und der Zweite steuert die zusätzliche Speicherung des Aufruf-Stacks. Die Zeichenketten sind Optional. Die erste setzt den Wert für eine erweiterte Info, die nützlich sein könnte. In G_Http ist dies z. B. die übergebene Aktion. Die zweite Zeichenkette setzt den Speichertpfad für das Protokoll neu.
Beispiel:
Self.oDT := DebugTimerInit(@oSystem.lBackupDebugTimer,
@oSystem.lDebugCallStack,
'',
GL_EXePath+'DATA\Debug\Backup_'+cBackupNr+'.log'
);
DebugTimerStart
Parameter: TMyDebugTimer, string, string='', string='', TDebugSwitch=dsGlobal, TDebugSwitch=dsGlobal
Verwendung: Diese Funktion startet die Zeiterfassung für eine Ebene. Als erstes wird eine Klassenvariable des Typs TMyDebugTimer erwartet. Diese wird falls nil erstellt. Die Zeichenketten aus Parameter 3 und 4 haben nur im Falle der Erzeugung einer Instanz von TMyDebugTimer eine Relevanz. Der zweite Parameter wird ebenfalls zwingend erwartet. Die Zeichenkette sollte die Funktion, die hier gemessen werden soll eindeutig wiedergeben. Der übergebene Wert sird später in der Datei hinter BEGIN und END eingefügt. Es empfiehlt sich daher hier einfach den Namen der Funktion eventuell mit Namen der Klasse zu übergeben. Die letzte beiden Parameter sind vom Typ TDebugSwitch. Im Standard wird hier die Verwendung von globalen Variablen angenommen. Dies funktioniert nur, wenn die Pointer auch gesetzt sind. Ist dies nicht der Fall, so werden intern die Variablen zum Schreiben und dem Speichern des Callstacks auf False gesetzt.
Beispiel:
DebugTimerStart(Self.oDT,
'TShop_XTCModified.i_SetArtikelBilder',
'[' + Self.cAction + '] (' + oSystem.UserNr + ') | ',
Self.cOBSDir + 'debug\DebugTime.log',
lWrite,
dsOff
);
DebugTimerLine
Parameter: TMyDebugTimer, string, TDebugSwitch=dsGlobal, TDebugSwitch=dsGlobal
Verwendung: Es wird eine Instanz von TMyDebugTimer und eine Zeichenkette erwartet.Die übergebene Zeichenkette wird in die Log-Datei auf die aktuelle Ebene geschrieben. Die letzten beiden Parameter vom Typ TDebugSwitch sind optional.
Beispiel:
DebugTimerLine(Self.oDT,cFunc+' '+cAction);
DebugTimerEnd
Parameter: TMyDebugTimer, TDebugSwitch=dsGlobal, TDebugSwitch=dsGlobal
Verwendung: Stoppt die Zeit und trägt dies in die Datei ein. Hier ist unr die Instanz erforderlich. Die letzten beiden Parameter vom Typ TDebugSwitch sind optional.
Beispiel:
DebugTimerEnd(Self.oDT);
Aufbau Datei
Die Einträge werden in der Datei ähnlich dem Sourcecode eingerückt. Start und Ende einer Funktion werden auf gleicher Ebene dargestellt. Die Zeit, welche für die Ausführung der Funktion benötigt wurde, steht immer hinter dem Ende-Eintrag. Das ganze kann dann wie folgt aussehen:
31.03.2016 19:40:38 | [000004] (037) | BEGIN Connect 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_NewFile 31.03.2016 19:40:38 | [000004] (037) | END i_NewFile (0,005 s) 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_AddParam 31.03.2016 19:40:38 | [000004] (037) | END i_AddParam (0,003 s) 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_AddParam 31.03.2016 19:40:38 | [000004] (037) | END i_AddParam (0,004 s) 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_AddParam 31.03.2016 19:40:38 | [000004] (037) | END i_AddParam (0,003 s) 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_AddParam 31.03.2016 19:40:38 | [000004] (037) | END i_AddParam (0,002 s) 31.03.2016 19:40:38 | [000004] (037) | BEGIN i_SendRequest 31.03.2016 19:40:41 | [000004] (037) | BEGIN i_ReadMsg 31.03.2016 19:40:41 | [000004] (037) | END i_ReadMsg (0,001 s) 31.03.2016 19:40:41 | [000004] (037) | END i_SendRequest (2,335 s) 31.03.2016 19:40:41 | [000004] (037) | BEGIN i_CheckResult 31.03.2016 19:40:41 | [000004] (037) | BEGIN i_NewFile 31.03.2016 19:40:41 | [000004] (037) | END i_NewFile (0,009 s) 31.03.2016 19:40:41 | [000004] (037) | END i_CheckResult (0,025 s) 31.03.2016 19:40:41 | [000004] (037) | BEGIN i_GetResult 31.03.2016 19:40:41 | [000004] (037) | END i_GetResult (0,005 s) 31.03.2016 19:40:41 | [000004] (037) | END Connect (2,426 s)