Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Debugging (https://www.delphipraxis.net/141412-debugging.html)

knochen 8. Okt 2009 14:26


Debugging
 
Hallo zusammen,



in einer komplexen Applikation mit vielen Fenstern, Units usw. habe ich das Problem herauszufinden, wer oder welche Unit einen Button auf Button1.Enabled := False stellt. Kann ich per Debugger überwachen, wann der Zustand des Buttons sich ändert?



Mit der Liste überwachter Ausdrücke bin ich leider nicht weitergekommen. Dort habe ich versuchsweise eigegeben Button1.Enabled oder auch Button1.Enabled = False



Beides reagiert nicht auf Änderungen des Enabled-Zustandes.

Erschwerend kommt hinzu, dass ich nicht danach suchen kann, da an vielen Stellen im Programm mit FindComponent oder anderen Sachen gearbeitet wird, sodass der Button wahrscheinlich mit einem ganz andren Namen angesprochen wird.



Wer weiß da weiter?



Vielen Dank im Voraus.

Bernhard Geyer 8. Okt 2009 14:31

Re: Debugging
 
Benenne den Button um.
Stell eine Setter-Methode (SetButtonEnabled()) bereit und ändere alle Direkten Aufrufe von Button1.Enabled.
Dann kannst du schön das ändern des Buttons debuggen.

mirage228 8. Okt 2009 14:32

Re: Debugging
 
Du könntest versuchen mit Debug DCUs kompilieren und einen bedingten Haltepunkt (nur halten, falls Name = '...' oder so) an SetEnabled() des Buttons in der VCL setzen.

himitsu 8. Okt 2009 14:33

Re: Debugging
 
Man könnte den Button eventuell mal kurz gegen eine andere Komponente austauschen.

Und in dieser (selbsterstellten Dummykomponente) wird dann der Zugriff auf .Enabled überwacht.

knochen 9. Okt 2009 07:21

Re: Debugging
 
Zitat:

Zitat von himitsu
Man könnte den Button eventuell mal kurz gegen eine andere Komponente austauschen.

Und in dieser (selbsterstellten Dummykomponente) wird dann der Zugriff auf .Enabled überwacht.

Das ist ohne Zweifel die (für meinen Fall) ideale Votrgehensweise. Ich hätte nur gedacht, Delphi gibt sowas in den Untiefen des Debuggers schon von Haus aus her. Schade, aber Hauptsache es klappt.

Danke auch für die anderen Vorschläge.

mkinzler 9. Okt 2009 08:08

Re: Debugging
 
Ab D10 könnte man das u.U. einfach mit einem Class Helper realisieren. Denn man dann einfach in die Uses einbindet, wenn man die Funktionalität benötigt

Meflin 9. Okt 2009 10:19

Re: Debugging
 
Zitat:

Zitat von mkinzler
Ab D2010 könnte man das u.U. einfach mit einem Class Helper realisieren.

class helper gibts auch schon in 2007. Verstehe allerdings grade nicht ganz, wie das zur Problemlösung beiträgt :gruebel:

mkinzler 9. Okt 2009 10:26

Re: Debugging
 
Ich wollte auch D10 schreiben :oops:
Dann bräuchte man keine eigene Klasse ableiten und überall im Quelltext ändern

himitsu 9. Okt 2009 10:34

Re: Debugging
 
Du kannst mir ClassHelpern aber keine existierenden Funktionen überschreiben oder neue Funktionen in die alten einschleußen, also bringen hier ClassHelper nichts,
denn man muß dazu ja an bestehende Aufrufe herankommen. Und dieses geht leider nur über eine Ableitung, Umleitung oder einen Dummy.

Oder eben über den Vorschlag von mirage228.


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