Profiling tool for Lazarus applications

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ramiroelliot
Beiträge: 1
Registriert: Di 12. Nov 2024, 04:45

Profiling tool for Lazarus applications

Beitrag von ramiroelliot »

Hallo zusammen,

Ich muss wissen, ob das Tool existiert und wo ich es finden kann. Ich brauche ein Profiling-Tool, das mit Lazarus-Anwendungen in der neuesten stabilen Version beider Lazarus-Versionen funktioniert.

LazProfile funktioniert nicht, das erste ist 5 Jahre alt und lässt sich nicht kompilieren, das zweite ist 14 Jahre alt und hat ein paar Paketfehler.

Ich habe versucht, die Anwendung mit Valgrind unter Linux auszuführen und dabei auch -gv in der Konsolen-App zuzulassen, aber Valgrind gibt einen Fehler aus, als ob die Anwendung nicht ausgeführt werden könnte.

Wir entwickeln ein Komponentenpaket, das im Vergleich zu seiner idealen Geschwindigkeitsspanne langsam ist, also brauche ich ein Tool, das mir hilft, herauszufinden, wo im Code die Verlangsamung auftritt.

Vielen Dank im Voraus

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Profiling tool for Lazarus applications

Beitrag von charlytango »

Benutzt ihr in eurem Komponentenpaket Threading?

Ich hatte in einem System mal die Situation dass mehrere Thread arbeiteten, jeder einzelne Thread aber weniger als 10 Millisekunden benötigte (z.B. 4ms). Trotzdem hat das Betriebssystem die 10 ms seiner Zeitscheibe gewartet (also zusätzliche 7ms).

Das dann multipliziert mit einigen laufenden Threads die auch noch synchronisiert werden mussten hat das die Durchlaufzeiten für einen Prozess drastisch erhöht.

Als Lösung haben wir dann das (Linux-) Betriebssystem mit einer Zeitscheibe von 1 ms kompiliert, dann hat es geklappt.

hum4n0id3
Beiträge: 319
Registriert: So 5. Mai 2019, 15:23

Re: Profiling tool for Lazarus applications

Beitrag von hum4n0id3 »

Ich habe in Google, profiler Lazarus IDE eingehen und auf den ersten Blick einiges finden können. Wie gut die Ereignisse sind, kann ich allerdings nicht sagen.

Was vielleicht auch helfen kann, wenn man selbst die Zeit einer Funktion/Methode misst. Unter PHP beschäftige ich mich momentan etwas damit, indem ich eine Startzeit am Anfang der Funktion/Methode setze und es anschließend ausrechne.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Profiling tool for Lazarus applications

Beitrag von theo »

Was ziemlich voraussetzunglos funktioniert, ist GetTickCount an Stellen, wo du das Problem vermutest.

Code: Alles auswählen

uses ... LazLogger;
...
procedure TForm1.Button1Click(Sender: TObject);
var Tick:Int64;
begin
  Tick:=GetTickCount64;
  Sleep(500);
  DebugLn('1.Stelle: ', IntToStr(GetTickCount64-Tick),'ms');
  Sleep(100);
  DebugLn('2.Stelle: ',IntToStr(GetTickCount64-Tick),'ms');
  Tick:=GetTickCount64; //Zurücksetzen
  Sleep(50);
  DebugLn('3.Stelle: ',IntToStr(GetTickCount64-Tick),'ms');
end; 
Anschauen z.B. mit Ansicht -> Debuggerfenster -> Console In/Output

https://wiki.freepascal.org/LazLogger

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Profiling tool for Lazarus applications

Beitrag von wp_xyz »

ramiroelliot hat geschrieben: Di 12. Nov 2024, 05:16 LazProfile funktioniert nicht, das erste ist 5 Jahre alt und lässt sich nicht kompilieren, das zweite ist 14 Jahre alt und hat ein paar Paketfehler.
Das erste? das Zweite? Ich nehme an, der komplette Text wäre "LazProfiler/FpProfiler funktioniert nicht", so wie du im englischen Forum geschrieben hast.

LazProfiler habe ich ausprobiert. Ja, das Package kompiliert nicht, aber das ist einfach zu beheben, da die Umbenennung von TVirtualStringTree zu TLazVirtualXtringTree für den Lazarus-Fork von VirtualTreeView nicht eingearbeitet ist. Mache diese Änderung an allen Stellen, dir dir der Compiler zeigt, und das Package kompiliert. Trotzdem konnte ich anschließend eines meiner Projekte nicht profilieren, aber vielleicht hätte ich mich mehr damit befasen müssen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Profiling tool for Lazarus applications

Beitrag von fliegermichl »

Ich hab mich ebenfalls damit beschäftigt.
Nachdem ich TVirtualStringTree durch TLazVirtualStringTree ersetzt und alle WriteLn(xxx) auskommentiert habe,
hat es compiliert und ich konnte es auch installieren.
Wenn ich dann ein Testprojekt profilieren wollte, kam eine Meldung, dass Resourcen vom Typ 'res' nicht unterstützt würden.

Da habe ich dann in LazProfilerAddOn.pas in Zeile 1178 nach dem erzeugen des Parsers die Zeile

Code: Alles auswählen

  pas.Options:=pas.Options+[po_IgnoreUnknownResource];
eingefügt.

Jetzt kann ich unter Ansicht -> Profiler (Results and Configuration) das profilieren konfigurieren.
Nachdem ich Start -> Profiler angeklickt hab, wird mein Projekt compiliert und gestartet.
Nach der Ausführung ist aber im Profiler kein Ergebnis zu sehen.
Werd mal weiter forschen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Profiling tool for Lazarus applications

Beitrag von fliegermichl »

Ich hab einen Branch gefunden, der direkt funktioniert.

Code: Alles auswählen

git clone https://github.com/seryal/LazProfiler.git

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Profiling tool for Lazarus applications

Beitrag von wp_xyz »

fliegermichl hat geschrieben: Di 12. Nov 2024, 15:58 Ich hab einen Branch gefunden, der direkt funktioniert.
Ja, dieser Code (*) compiliert ohne weitere Veränderungen, aber auch hiere ist das Output-Fenster nach dem Ende des zu testenden Programms leer, bzw. zeigt nur eine Checkbox mit dem Programm-Namen an, und wenn ich die anklicke, habe ich eine Schutzverletzung...

(*) Leider hat der Autor in der Unit LazProfilerAddon die Schreibweise aller möglichen Parameter geändert, so dass man nicht sieht, wo die wesentlichen Änderungen sind. Kann man das git diff eigentlich dazu überreden, die Schreibweise zu ignorieren?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Profiling tool for Lazarus applications

Beitrag von fliegermichl »

Also bei einem Mini Testprojekt hat es funktioniert und ich bekam auch eine Ausgabe. Wie oft wurde die Routine aufgerufen usw.
Bei meinem GLScene Testprojekt bekommt er die Instrumentalisierung nicht hin (oder ich bin zu ungeduldig)

Antworten