Debuger und Eigenschaften der Komponenten
Debuger und Eigenschaften der Komponenten
Hi,
wahrscheinlich habe ich es schon mal irgendwann gefragt; habe es auf jeden Fall vergessen oder keine befriedigende Antwort bekommen, welche ich mir gemerkt habe
Warum werden Eigenschaften von Komponenten nicht angezeigt?
Vielleicht kann mir das mal jemand schlüssig erklären...
Warum wird bei Label1.caption kein Wert gezeigt?
wahrscheinlich habe ich es schon mal irgendwann gefragt; habe es auf jeden Fall vergessen oder keine befriedigende Antwort bekommen, welche ich mir gemerkt habe
Warum werden Eigenschaften von Komponenten nicht angezeigt?
Vielleicht kann mir das mal jemand schlüssig erklären...
Warum wird bei Label1.caption kein Wert gezeigt?
Gruß, Michael
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1432
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Debuger und Eigenschaften der Komponenten
Der Debugger kann nur Properties anzeigen, die direkt auf ein Feld zeigen. Wenn der Inhalt über eine Gettermethode geholt wird, kann er es nicht.
Warum ist mir auch ein Rätsel.
Delphi 5 konnte das schon 1998
Warum ist mir auch ein Rätsel.
Delphi 5 konnte das schon 1998
Re: Debuger und Eigenschaften der Komponenten
Jetzt erinnere ich mich dunkel
Ich denke, das hat schon in D2 funktioniert!
Danke @fliegermichl
Ich denke, das hat schon in D2 funktioniert!
Danke @fliegermichl
Gruß, Michael
Re: Debuger und Eigenschaften der Komponenten
Ich stelle mir das höchst kompliziert vor: Da muss der Debugger den Code ausführen, der dem Getter zugeordnet ist. Im Getter ist aber alles erlaubt, insbesondere können Variablen verändert werden, und diese werden den späteren Verlauf des Programms verändern.
Und Delphi kann das auch nicht immer so problemlos. Ich habe immer wieder Fälle, bei denen das Popup-Fenster für den Wert eines Propery nichts anzeigt.
Und Delphi kann das auch nicht immer so problemlos. Ich habe immer wieder Fälle, bei denen das Popup-Fenster für den Wert eines Propery nichts anzeigt.
Re: Debuger und Eigenschaften der Komponenten
Naja, einigen wir uns auf: Meist funktioniert es.
Unter Lazarus aber nie
Oft muss ich extra eine lokale Variable definieren oder sonstige Umwege gehen.
Wie geht ihr damit um? Habt ihr das Problem nicht?
Gruß, Michael
Re: Debuger und Eigenschaften der Komponenten
Also umschiffst du das Problem auch in gleicher Weise...
Gruß, Michael
- af0815
- Lazarusforum e. V.
- Beiträge: 6198
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Debuger und Eigenschaften der Komponenten
Ich habe das bis D8 mit dem Debugger selbst erleben dürfen, so gross ist der Unterschied zum aktuellen Lazarus nicht wirklich. Zumindest bin ich mit Lazarus zufrieden. Und beim Crosscompiling kann man sowieso schlechter debuggen. Mit dem remote GDB hat man eine Chance, falls man sich den richtigen remote GDB bauen kann. Für mich ist mittlerweile LazLogger der beste Freund.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 825
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Debuger und Eigenschaften der Komponenten
Wie wp_xyz bereits angedeutet hat: weil das eben ein komplexes Problem ist. Wäre es einfach zu lösen, dann hätten wir es bereits, weil es ja bekanntlich so nützlich ist.
Um mal die Probleme aufzulisten:
- Der Debugger muss erkennen können, dass es sich um eine Eigenschaft handelt und ob er sie mittels eines Feldes oder eines Methodenaufrufs ermitteln kann (hier ist auch noch die Unterscheidung statisch oder virtuell wichtig), das heißt dies muss entsprechend in der Debuginformation hinterlegt sein (heißt der Compiler muss es auf eine Art generieren, die es dem Debugger erlaubt diese Information an die IDE weiter zu geben)
- Der Debugger muss die Möglichkeit haben Methoden aufzurufen. GDB hat diese Fähigkeit prinzipiell, aber es muss dennoch ein korrekter Stack erzeugt werden und die Parameterübergabekonvention muss korrekt erfüllt werden (das heißt dies ist noch dazu sehr plattformabhängig und muss auch für jede Aufrufkonvention gemacht werden)
- Es muss sichergestellt werden, dass der Debugger bzw. die IDE nicht hängen bleibt (was wenn zum Beispiel ein Getter aufgerufen wird der eine TCriticalSection nutzt, diese aber gleichzeitig vom Code der debugged wird auch betreten wurde?)
Joost van der Sluis ist derjenige von uns der da hauptsächlich an der Thematik arbeitet und es gibt da durchaus entsprechende Fortschritte (zum Beispiel hier - das ist zwar in Visual Studio Code nutzt aber FpDebug - oder hier zur Verbesserung der Debugschnittstelle innerhalb von Lazarus in Vorbereitung auf das alles).
FPC Compiler Entwickler
-
- Beiträge: 572
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Debuger und Eigenschaften der Komponenten
Delphi nutzt weder stabs noch dwarf....
stabs und dwarf haben keine Definition für "Properties".
Damit das funktioniert:
- Muss der Compiler zusätzliche Info generieren (Joost arbeitet daran / Dwarf extension)
- Der Debugger diese lesen (kommt dann als nächstes)
- Der Debugger Funktionen aufrufen können (funktioniert teilweise bereits, dank Joost)
FpDebug kann derzeit (in 2.2) bestimmte Funktionen aufrufen, wenn die Argumente, und Result alle in Register passen, und NICHT "managed" (oder referenced) sind.
Allerdings schreibt der Compiler derzeit nicht für alle Methoden einer Klasse vollständige infos.....
stabs und dwarf haben keine Definition für "Properties".
Damit das funktioniert:
- Muss der Compiler zusätzliche Info generieren (Joost arbeitet daran / Dwarf extension)
- Der Debugger diese lesen (kommt dann als nächstes)
- Der Debugger Funktionen aufrufen können (funktioniert teilweise bereits, dank Joost)
FpDebug kann derzeit (in 2.2) bestimmte Funktionen aufrufen, wenn die Argumente, und Result alle in Register passen, und NICHT "managed" (oder referenced) sind.
Allerdings schreibt der Compiler derzeit nicht für alle Methoden einer Klasse vollständige infos.....
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1432
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Debuger und Eigenschaften der Komponenten
Das lässt hoffen. Danke für die Informationen.
- af0815
- Lazarusforum e. V.
- Beiträge: 6198
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Debuger und Eigenschaften der Komponenten
Der Screencast für die Debuggerschnittstelle sieht schon sehr gut aus. Das lässt auf sehr viel Komfort und Information hoffen.
Auch interessant zu sehen, wie ein Pascalprogramm durch VSC ausgeführt und debugged wird.
Danke für den interessanten Einblick in die Zukunft.
Auch interessant zu sehen, wie ein Pascalprogramm durch VSC ausgeführt und debugged wird.
Danke für den interessanten Einblick in die Zukunft.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2636
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Debuger und Eigenschaften der Komponenten
wp_xyz hat ja schon angedeutet, dass es zu Seiteneffekten kommen kann. Nehmen wir mal folgende Klasse:
Ich habe die Property MyString die eine Zeichenkette enthält, sowie die Property MyStringReadCount die angibt wie oft auf MyString lesend zugegriffen wurde (nach dem letzten Schreibzugriff).
Wenn ich jetzt also per Debugger auf MyString zugreife, wird sich auch dieser Wert ändern. Damit liefert der Debugger nicht nur eine Einsicht in den Zustand meines Systems, er verändert es. Im Grunde ist das dann Schrödingers Katze. Ich verändere das System um seinen Zustand in Erfahrung zu bringen.
Und jetzt kommen wir zu der eigentlichen Frage: Warum brauche ich überhaupt einen Debuggerzugriff auf eine Property?
Es fällt mir jetzt eigentlich kein sinnvoller Grund ein. Die Daten sind ja in irgendwelchen Feldern abgelegt, also muss ich auch nur diese Felder auswerten.
Code: Alles auswählen
type
TMyClass = class(TObject)
private
FMyString: String;
FMyStringReadCount: Integer;
private
function GetMyString: String;
procedure SetMyString(AValue: String);
public
constructor Create;
public
property MyString: String read GetMyString write SetMyString;
property MyStringReadCount: Integer read FMyStringReadCount;
end;
function TMyClass.GetMyString: String;
begin
Inc(FMyStringReadCount);
Result := FMyString;
end;
procedure TMyClass.SetMyString(AValue: String);
begin
if FMyString = AValue then Exit;
FMyStringReadCount := 0;
FMyString := AValue;
end;
constructor TMyClass.Create;
begin
inherited Create;
FMyString := 'Test';
FMyStringReadCount := 0;
end;
Wenn ich jetzt also per Debugger auf MyString zugreife, wird sich auch dieser Wert ändern. Damit liefert der Debugger nicht nur eine Einsicht in den Zustand meines Systems, er verändert es. Im Grunde ist das dann Schrödingers Katze. Ich verändere das System um seinen Zustand in Erfahrung zu bringen.
Und jetzt kommen wir zu der eigentlichen Frage: Warum brauche ich überhaupt einen Debuggerzugriff auf eine Property?
Es fällt mir jetzt eigentlich kein sinnvoller Grund ein. Die Daten sind ja in irgendwelchen Feldern abgelegt, also muss ich auch nur diese Felder auswerten.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Debuger und Eigenschaften der Komponenten
Ich weiß nicht, warum du es brauchen könntest.Warum brauche ich überhaupt einen Debuggerzugriff auf eine Property?
Ich benötige beim Debuggen manchmal Informationen über Eigenschaften von Objekten.
Hier geht es dann nur über Umwege im Moment.
Gruß, Michael