![]() |
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
Zitat:
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Ab D2006 hatte sich ja die ganze IDE geändert und wenn ich mich recht erinnere, gibt es dort einfach keinen ordentlichen Punkt, wo man den integrieren konnte, oder irgendwie sowas. |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Sagt der Sadist: "Nein" SCNR ;) |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Ja wie jetzt? Heisst es zuerst du musst das über einen Precompiler machen und dann geht das nicht oder wie? :roll:
dann bleiben nur noch die erweiterten Debug informationen... der punkt ist jedoch das ich das nicht in der IDE laufen lassen möchte sondern auf einem Kundensystem wo ich nicht zuerst die IDE noch installieren kann. Ausserdem ist es mir ein rätsel wie das genau funktionieren soll, könnte aber auch nur an unwissenheit liegen ;) Daraus schliesse ich, ich müsste ein Programm schreiben welches mir in einem verzeichnis rekursiv nach .pas files sucht und dort die Tracing klasse im Uses hinzufügt und diese in jeder methode einfügt. Leider wüsste ich gerade nicht wie ich herausfinden soll wo der methodenstart liegt. ich kann ja nicht einfach nach dem ersten nicht eingerückten begin suchen oder etwas in der art. gruss Severin |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
.. wenn Du das mit dem Interface probierts..
Kannst Du Deinem Programm doch ein Parameter mitgeben (-debugOn) um dann die Messungen durchzuführen. Grüße Klaus |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
was aber voraussetzen würde das bereits beim Compilieren in jeder Methode die Zeile steht. Ich möchte diese Zeilen jedoch nur im Code haben wenn ich sie benötige und auch wieder herausnehmen wenn sie nicht benötigt sind.
Ich will auch nicht jede Methode von Hand anfassen und diese Zeile einfügen. Das ist schlicht und einfach idiotenarbeit ;) gruss Gibb |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Liste der Anhänge anzeigen (Anzahl: 3)
Was spricht dagegen ein Tool zu schreiben, das das für einen übernimmt?
Edit: Oh, ich sehe gerade, dass es doch nicht so gut funktioniert. Sorry für den Müll. Edit2: Kleine Korrektur. Verschachtelte Methoden funktionieren aber immer noch nicht. Edit3: Anhang siehe weiter unten |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Ich würde da eher einen
![]() |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Hier nochmal eine kleine Korrektur... (das war auf jedenfall eine kleine, schöne Fingerübung) @gibb: Benutze den Parser, den Stevie verlinkt hat. [Anhang gelöscht] |
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.
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Wie auch immer, Viel Glück... Das ist wirklich eine sehr interessante Problemstellung. Mir juckt es da ja in den Fingern... Aber veröffentlichen werde ich, wenn ich eine Lösung habe, diese ganz bestimmt nicht nochmal hier. (Vielleicht die EXE, das wäre doch super hilfreich). |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Delphi-Quellcode:
und hier kannst du dann implementieren, was du möchtest :) Einziger wirklicher Nachteil ist, dass man ein Mapping ID => Name braucht. Den Callstack kannst du ja auch hier rausziehen - dann wäre ggf. auch die ID wieder egal ;)
procedure ProfilerEnterProc(procID: integer);
begin // create callstack and write to logfile end; procedure ProfilerExitProc(procID: integer); begin // do nothing... end; |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Dann bleibt aber meine frage, wie erweitere ich den Searchpath von GPprofile? Gruss Gibb |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Hallo zusammen,
ich habe 2 Probleme... 1. Ich glaube ich hab noch nicht ganz verstanden wie der GPProfiler verwendet werden soll... die Idee ist das ich die 2 Units meinem Projekt Hinzufüge ist das Korrekt? 2.Wer weiss wo man die Jediklasse findet den methodenname aus dem Callstack ausliest? Problem ist folgendes: Ich find per google nur Starwars jedi ritter ;) |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Zitat:
Die Unit heißt JclDebug hat hat Methoden wie LineByLevel, ProcByLevel, FileByLevel. In der gleichen Methode ist Level = 0, wenn den direkten Aufrufer haben will 1, usw. |
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Ich hab mir unterdessen die komplette JCL installiert... wenn ich jedoch die Unit die du mir genannt hast use und die funktion aufrufe kriege ich einen Leerstring zurück... das lässt mich vermuten das ich irgendwas nicht richtig initialisiere... Result ist leer und beinhaltet daher auch keinen . ... was muss ich machen damit das aktiv wird?
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Wenn keine entsprechenden Debuginfos einkompiliert sind, dann kann die Funktion natürlich auch nichts finden.
|
AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Ja das hab ich unterdessen auch gemerkt :roll:
Aber das ganze funktioniert jetzt :thumb: Was aber einwenig umständlich ist jetzt das zuerst mit GPProfiler die entsprechenden Units eingebunden werden müssen (Was nicht bei allen geht weil der Searchpath nicht alle units beinhaltet. In der IDE haben wir zusätzliche Pfade angegeben. Geht das nicht auch irgendwie beim GPProfiler?) Dann muss bei der IDE die JCL installiert sein. Nur mit den Units gehts ja nicht ;) Gruss Sev |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 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