Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Klassenfunktionen überwachen (https://www.delphipraxis.net/111229-klassenfunktionen-ueberwachen.html)

backdraft 31. Mär 2008 21:31


Klassenfunktionen überwachen
 
Hallo zusammen,

ich suche eine Möglichkeit eine Klasse von aussen zu überwachen.
Dh. ich hab meine Klasse XYZ und möchte quasi ein event haben, wenn eine Funktion der Klasse aufgerufen wird.

Grund dafür ist, dass ich öfter mal wissen möchte, welche Funktionen meiner Klasse, in welcher Reihenfolge aufgerufen werden.

Vielleicht gibt es ja in Delphi eine Funktion dafür, für GetMem/FreeMem hab ich sowas gefunden (TMemoryManager).

Irgendwie muss der DelphiDebugger das ja auch mitkriegen, wenn ich an eine Stelle im Sourcecode komme.

Danke
Oliver

mkinzler 31. Mär 2008 21:35

Re: Klassenfunktionen überwachen
 
Das müsstest du manuell implementieren oder du verwendest einen Profiler.

backdraft 31. Mär 2008 21:55

Re: Klassenfunktionen überwachen
 
Zitat:

Zitat von mkinzler
Das müsstest du manuell implementieren oder du verwendest einen Profiler.

wie macht der das?

Bernhard Geyer 31. Mär 2008 22:15

Re: Klassenfunktionen überwachen
 
Zitat:

Zitat von backdraft
Zitat:

Zitat von mkinzler
Das müsstest du manuell implementieren oder du verwendest einen Profiler.

wie macht der das?

Er hängt entsprechend an jeder Einsprung und Rücksprung-Adresse seine Überwachungs-Calls rein. Funktioniert aber (mit entsprechender sprechender Ausgabe) nur wenn genügend Debuginfos (TD32-Debuginfos) in der Exe vorhanden sind. AQTime ist z.B. ein erstklassiger Profiler welcher Callgraphen bietet.

backdraft 31. Mär 2008 22:31

Re: Klassenfunktionen überwachen
 
und ich hab keine chance das in meiner anwendung zu überwachen?

wie doof ist das denn, dass ein programm von aussen mehr kann, als ich innerhalb meines programms? :-(

sx2008 31. Mär 2008 22:34

Re: Klassenfunktionen überwachen
 
Zitat:

Zitat von backdraft
Irgendwie muss der DelphiDebugger das ja auch mitkriegen, wenn ich an eine Stelle im Sourcecode komme.

Der Debugger überschreibt den 1. Befehl einer Funktion mit INT 3 und merkt sich den alten OPcode.
Wird der Debugger über INT 3 aufgerufen, dann stellt er den alten Opcode wieder her.
Dieses Verfahren kommt so für dich aber nicht in Frage.

Dann gäbe es da noch Profiler, die alle Funktionsaufrufe protokollieren und vorallem die Zeit messen.
Ist es dass, was dich interessiert ?

mkinzler 31. Mär 2008 22:38

Re: Klassenfunktionen überwachen
 
Doch, du musst es halt selber machen.
ein weiterer Profiler wäre ProDelphi. Ist nicht so mächtig wie AQTime aber es gibt eine Freeware-Version davon

backdraft 31. Mär 2008 22:51

Re: Klassenfunktionen überwachen
 
Also zurzeit habe ich halt in jede Funktion der Klasse ein

Log("bin in Funktion XYZ");

Das wollte ich einfach automatisieren.
Mich interessiert auch nicht, wie lange er für was gebraucht hat, sondern die Reihenfolge, wann welche Funktion aufgerufen wurde.

Meistens habe ich bei Windows Funktionen Probleme, weil ich nicht weiss in welcher Reihenfolge sie kommen (Create, Loaded, CreateWND, usw).

Ich dachte man kann das irgendwie automatisch machen.

sx2008 3. Apr 2008 01:51

Re: Klassenfunktionen überwachen
 
Im Debugger kann man sich den Stack anschauen und erfährt so die Reihenfolge der Funktionen.
Man kann bei Auftreten einer Exception das Programm veranlassen einen Stacktrace auszugeben (auch ohne Debugger). (z.B. mit MadExcept oder JCL)
Das sollte eigenlich reichen, denn die Reihenfolge der Funktionen interessiert ja nur bei der Fehlersuche.

sirius 3. Apr 2008 08:05

Re: Klassenfunktionen überwachen
 
Du könntest die zu überwachenden Methoden alle dynamisch deklarieren und dann die dynamische Methodentabelle umschreiben.
Aber ich sehe, wie meine Vorredner auch, dies alles eher in der Funktion eines geeigneten Debuggers.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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