DbgTimer verwendet intern den EpikTimer, der aber weder in das eigene Projekt eingebunden, noch in der Lazarus-IDE installiert sein muß. Lediglich muß EpikTimer.pas im Suchpfad des Compilers zu finden sein. Der EpikTimer verbraucht praktisch keine Ressourcen, anders als z.B. der TFPTimer, der zusätzliche Click-Events generiert. Für nähere Infos sh. http://wiki.freepascal.org/EpikTimer/de.
Der Grundgedanke ist, wie schon gesagt, den Timer innerhalb der IDE so unaufwändig wie möglich temporär einhängen und ihn genauso einfach auch wieder aus dem eigenen Quellcode entfernen zu können. Eingesetzt wird der DbgTimer folgendermaßen:
- "DbgTimer" in die uses-Zeile derjenigen Unit eintragen, die man untersuchen will.
- Es gibt nur zwei Anweisungen (ok: Zweieinhalb): "DebugTimerStart" und "DebugTimerStop". Damit umhüllt man den Programmblock, den man vermessen möchte, z.B. so:
Code: Alles auswählen
DebugTimerStart;
for i := 0 to FFiles.Count - 1 do ParseFile(i);
DebugTimerStop;
NaechsteAnweisung; // Hier Breakpoint setzen
Will man zusätzlich die Zeit pro Schleifendurchlauf wissen, kann man stattdessen auch "DebugTimerStop" mit dem Zählparameter versehen:Code: Alles auswählen
DebugTimerStop({Anzahl der Zyklen, in dem Fall also} i+1);
- Nun mal kurz in der DbgTimer-Unit vorbeischauen (z.B. indem man den Cursor auf "DebugTimerStart" setzt und ALT+Up eingibt), die beiden Variablen "DebugTimeTotal" and "DebugTimePerCycle" anklicken und (per Strg+F5) in die Liste der überwachten Ausdrücke aufnehmen.
- Jetzt noch einen Breakpoint auf die Zeile unterhalb (!) von "DebugTimerStop" setzen. Läßt man das Programm jetzt laufen, unterbricht der Debugger die Ausführung nach Abschluß der Laufzeitmessung und man kann sich die Werte in der Watchlist anschauen. Das Ergebnis sieht dann z.B. so aus:
Code: Alles auswählen
DebugTimeTotal '0.217390 s'
DebugTimePerCycle '1.302 ms (167 Cycles)' - Wird der Timer nicht mehr benötigt, löscht man einfach den "DbgTimer"-Eintrag wieder aus der uses-Zeile und läßt sich vom Compiler die noch zu entfernenden Überreste zeigen.
Ich denke, noch einfacher geht's nicht mehr. Vielleicht kann's der eine oder andere ja gebrauchen.
Gruß Rüdiger
(Edit: Alte Datei gelöscht, aktuelle Version siehe unten.)