![]() |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Ein echter Precompiler hääte nur den Vorteil, daß er diese Änderung virtuell/temporär/unsichtbar nur wärend des Compilierens machen könnte. |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Ja natürlich. Mir ging es auch nur darum, dass Problem zu lösen. Leider gibt es eben scheinbar keine schöne Lösung, dann würde ich die auch bevorzugen.
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
AOP in Delphi (Profiling wäre eine der Anwendungsgebiete) beschäftigt mich schon eine Weile und das lässt sich aktuell nur behelfsmäßig über virtual method interception lösen. Alternative wäre eine Art Preprozessor zu bauen oder die Binary nachträglich zu modifizieren.
Aber an dieser Stelle nochmal die Frage: ist es notwendig Bottlenecks in der Anwendung zur Entwicklungszeit zu finden oder Echtzeitdaten beim Kunden in Produktiveinsatz? |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
noch ein ganz pragmatischer Ansatz wäre GpProfile (
![]()
Delphi-Quellcode:
wird glaube ich zu
procedure Foo
begin ... end
Delphi-Quellcode:
wir hatten das ne zeitlang genutzt, haben dann aber die Funktionen gpStart und gpEnd entsprechend angepasst.
procedure Foo
begin {$ifdef gpprofile}gpStart; try {$endif} ... {$ifdef gpprofile}finally gpEnd; end; {$endif} end |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
![]() |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Hallo, es geht darum in echtzeit beim Kunden auf seinem System das Festzustellen und nicht in der Entwicklungsphase. Weil der Kunde Entwickelt auch nur hat der kein Tool zur hand & wir auch erst seit kurzem so halb mit welchem er seine Performance probleme Analysieren kann. Unter umständen bedürfen seine Probleme anpassungen im Delphi sourcecode um das zu lösen. Schön wäre halt in dem Moment wenn man da schon einigermassen eingrenzen kann wo das ist und nicht zuerst die Kundendatenbank bei uns nachbauen muss um dann mit einem profiler drüber zu gehen (der unter umständen sowieso nicht funktioniert warum auch immer.)
Also ich fasse zusammen um auch sicher zu sein das ich alles richtig verstanden habe: - Omata hat nach einem Search Patern gesucht welches Methodenanfänge erkennt um dann dort eine Zeile einzufügen. Und war leider nicht erfolgreich (wäre mein bevorzugter ansatz gewesen. Wenn ich auch nur eine kleine ahnung gehabt hätte wie ich zuverlässig Methodenanfänge erkennen könnte) -Ich verwende einen Parser um damit einen Methodenanfang zu finden und dort meinen Inhalt einzufügen? Ich habe die pas mal überflogen und auf die schnelle nicht verstanden wie das genau zu verwenden ist. Gruss Gibb |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
@Stevie: der link ist auf der von mir verlinkten Seite auch vorhanden :)
@gibb Nein, ich habe eigentlich nur die Methode gezeigt, wie man mit möglichst wenig Aufwand ein Log einbauen kann. Die Aufrufe müssten schon von Hand geschrieben werden. Alternativ könnte man da mit gpProfile was basteln. Da ist zumindest der Parser dabei - ist ja OpenSource. |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
tschuldige, ich bin mit den Namen durcheinander gekommen, das war omata...:roll:
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
mhmm, ich habe mir gpProfile etwas angeschaut, zumindest die exe. Und die scheint genau das zu machen was ich eigentlich haben möchte zumindest fast ;)
Entweder such ich mir jetzt den Teil aus dem Code raus der das ganze parst oder aber ich kann direkt die exe so konfigurieren das ich es so verwenden kann... 1. wie passe ich den searchpath an für GP Profile? Wenn ich die .dpr öffne findet er nicht alle files weil nicht alle im searchpath von GPProfile sind. 2. Kann ich dem beibringen auch methoden aufzurufen und units zu includen die in meiner Applikation vorhanden sind? Wenn ja wie? resp. wo. Also ich möchte sozusagen das RAII patern mit der erweiterung für den Methodenname einbinden und halt meine Log funktion aufrufen und nicht die des GpProfile. Damit könnte ich dann einen Kompletten Callstack aus delphi & Scripting herstellen ebenso Zeitmessungen währen möglich und viele andere lustige sachen :D |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Hab auch den Source unterdessen gezogen, habs noch nicht kompiliert gekriegt. Auh habe ich noch nicht die Funktion gefunden die die anderen Registriert... leider dachte ich könnte da ev abschauen 8-) wenn jemand also mehr dazu weiss oder weiss wie ich am besten ein Tool schreibe das mir das oben beschriebene ermöglicht... nur immer her damit.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz