AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Start und Stop jeder Methode Tracen an nur einer stelle Implementieren
Thema durchsuchen
Ansicht
Themen-Optionen

Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

Ein Thema von gibb · begonnen am 23. Feb 2012 · letzter Beitrag vom 2. Mär 2012
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#1

Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 10:22
Delphi-Version: 5
Hallo zusammen,

Gibt es eine möglichkeit die zeit die in einer Methode verbracht wird zu tracen?

Klar ich könnte bei jedem methodenstart und ende eine Zeile einfügen, das ist jedoch nicht die Lösung die ich suche. Ich möchte an einem ort etwas machen das jeder Methodenstart und stop getracet wird und zwar mit Classenname und Methodenname nach möglichkeit.

geht das irgendwie? Ein simples Nein würde auch reichen wenns dann stimmt. Weil ich selber hätte keine ahnung wo das Delphi das anbieten sollte und wo die Logik dafür untergebracht währe.


gruss Severin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 10:29
Hallo...

welche Delphi Version hast du ? Ab DXE ist AQtime dabei (Standard). Damit kann man sowas einfach realisieren.

PS: Passe in deinem Profil einfach die Delphi Version an
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 10:32
AQTime ist super. Die größere Kaufversion kann auch Zeiten auf Quellcode-Zeilen profilen.
Damit haben wir schon einige Flaschenhälse behoben ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#4

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 10:34
Delphi 2006 sorry das habe ich vergessen zu schreiben. AQ time habe ich jedoch auch als Software zur verfügung. Ich möchte das jedoch nicht über AQ time lösen da ich es für weitere Analysen benötige die AQ Time mir nicht liefern kann da es Produktspezifisch ist.

Ausserdem läuft bei gewissen usecases AQ time nicht sauber und schmeisst exceptions weil wohl gewisse Programmierer etwas "verbotenes" gemacht haben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 11:07
Tja, einen allgemeinen und vorallem einfachen Weg gibt es nunmal nicht.

Entweger man sucht sich nachträglich (nach dem Kompilieren) aus den erweiterten Debuginfos die Methoden-Anfänge (erste Codezeile) und deren Ende (letzte Codezeile)
und patcht sich dann überall einen Funktionsaufruf (Logfunktion) rein, bzw. erstellt überall dort Haltepunkte, auf die ein eigener Debugger hört.

Oder man baut sich einen Precompiler, welcher vor dem compilieren die Quellcodes parst und überall diese Log-Funktionsufrufe reinmacht (nur für's Compilieren),
bzw. man läßt den Parser so drüberlaufen und läßt sich direkt in seine Quellcodes die Aufrufe reinbauen.
Oder man geht selber durch und macht die manuell rein.
$2B or not $2B
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 11:14
eine recht billige Variante ist mit einem Interface implementierbar - allerdings muss dann jede Methode, die gemessen werden soll, mit einer Zeile instrumentiert werden. Ich zeige hier mal ein kurzes Beispiel (aus dem Kopf runtergetippelt)

Delphi-Quellcode:
type
  IAutoDestroy = interface(IInterface)
  end;

  TMeasure = class(TInterfacedObject, IAutoDestroy)
  protected
    FMessage: string;
    procedure Log(const msg: string);
  public
    class function MeasureThis(const msg: string): IAutoDestroy
    constructor Create(const msg: string); reintroduce;
    destructor Destroy; override;
  end;

// ...

class function TMeasure.MeasureThis(const msg: string): IAutoDestroy
begin
  Result := TMeasure.Create(msg);
end;

constructor TMeasure.Create(const msg: string);
begin
  inherited Create;
  // Log msg
  FMessage := msg;
  Log('Beginn: ' + FMessage);
end;

destructor TMeasure.Destroy();
  Log('Ende: ' + FMessage);
end;

procedure TMeasure.Log(const msg: string);
begin
  Writeln(FormatDateTime('HH:MM:SS', Now), ' [', GetCurrentThreadId(), '] ', msg);
end;
Die Verwendung ist dann so:

Delphi-Quellcode:
procedure TForm.ButtonClick(...)
begin
  TMeasure.MeasureThis('TForm.ButtonClick');
  Writeln('Muuh');
  Sleep(1000);
end;
die Ausgabe ist dann etwa so:

Code:
11:12:00 [123] Beginn: TForm.ButtonClick
Muuh
11:12:01 [123] Ende: TForm.ButtonClick
Das lässt sich natürlich noch beliebig verfeinern
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 11:23
Für eine zeilenweise Analyse habe ich mir mal notdürftig etwas zusammengestrickt: http://www.delphipraxis.net/165749-r...hleunigen.html
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 11:33
Delphi 2006 sorry das habe ich vergessen zu schreiben. AQ time habe ich jedoch auch als Software zur verfügung. Ich möchte das jedoch nicht über AQ time lösen da ich es für weitere Analysen benötige die AQ Time mir nicht liefern kann da es Produktspezifisch ist.
???

Ausserdem läuft bei gewissen usecases AQ time nicht sauber und schmeisst exceptions weil wohl gewisse Programmierer etwas "verbotenes" gemacht haben.
Welche Version? Diverse Versionen haben so ihre Problem unter Win7. AQTime4 konnte ich unter Vista (32-Bit) einsetzen aber nicht mehr unter Win7 (64 Bit). Komischerweise läuft aber AQTime3 damit ganz gut. Die "verbotenen" Sachen macht hier eher AQTime als eure Entwickler.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#9

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 12:04
danke für die Zahlreichen Antworten

Mit der die wir hier haben und der Trial der neusten weil ich auch herausgefunden habe das unter win7 alte AQ time versionen Probleme machen

um deine Fragezeichen zu beantworten. Wir haben noch eine eigene Scriptingsprache integeriert und messen diese ebenso messen wir SQL statements aus dem Script und aus dem Delphi sourcecode. Die Scriptingsprache selber und die Methodenaufrufe tracen wir auch und können dann Informationen herausfiltern. Selbst der Java teil welcher delphi Code integriert können wir messen. Bis jetzt fehlt halt nur der Delphi Teil der bis jetzt als unbekante Zeitaufwand angegeben wird.Aber um herauszufinden wo das dann der Flaschenhals liegt müsste man die Methodenaufrüfe selber Tracen können

Gruss gibb
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 14:38
Die VAriante mit dem Interface ist eigentlich genial.
Das darf ich mir doch mopsen?

Bastle mir grade eine kleine rudimentäre Log-Klasse, welche ich in meinen Klassen/Komponenten verbauen will, wo unter Anderem auch ein EnterMethode-/ExitMethod-LogAufruf implementiert ist, allerdings muß ich bis jetzt das Exit noch selber aufrufen (OK, da wo man das Result mitloggen will, da kommt man um den händischen Aufruf nicht drumrum)
Die soll dann mal als Weiterleitung zu irgendeinem beliebigen Logsystem genutzt werden können.

Aber ich hab auch grade eine Idee, wie man in dem automatischen "Ende:" mitbekommt, ob dieses durch einen regulären Ausstieg (Methodenende oder Delphi-Referenz durchsuchenExit), oder durch DAS vERLASSEN über eine Exception, eingetreten ist.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz