Debugger

Für Fragen rund um die Ide und zum Debugger
Antworten
Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Debugger

Beitrag von Andromeda »

Hallo,

ich habe eine Frage zum Debugger oder besser gesagt zur Liste der überwachten Ausdrücke. Ich möchte mir den Wert von "Date" anzeigen lassen, doch wenn ich mein Programm mit F7 oder F8 starte, erscheint bei Date die Meldung: "<Error: No symbol\"DATE\" in current context.>". Die gleiche Meldung erscheint bei "now" und bei "DayofWeek".

Braucht man eine besondere Unit, um diese Werte benutzen zu können? Oder warum wird da nichts angezeigt? Der Compiler allerdings bringt keine Fehlermeldung.

Ich wäre sehr dankbar, wenn mich jemand aufklären könnte.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Debugger

Beitrag von Michl »

Der Debugger gibt aber noch mehr aus, nämlich "function Now : TDateTime" und die Deklaration der Funktion.

Der Debugger kann selbst keine Funktionen auswerten. Er hat aber festgestellt, dass es sich bei "Now" um eine Funktion handelt, deren Deklaration und deren Rückgabetyp. Du kannst jetzt einfach einer eigenen Variablen vom Typ TDateTime diese Funktion zuweisen und deren Inhalt dir per Debugger ausgeben lassen z.B.:

Code: Alles auswählen

program Project1;
 
uses
  SysUtils;
 
var
  aDateTime: TDateTime;
 
begin
  Writeln(Now);        //Now geht nicht (Funktion)
  aDateTime := Now;
  Writeln(aDateTime);  //aDateTime schon (Variable)
  Readln;
end.  
Das ist auch der Grund, weshalb manchmal im Code einer Variablen ein Wert zugewiesen wird, obwohl der gleiche Code auch ohne diese funktioniert hätte (aufgrund der besseren Nachvollziehbarkeit per Debugger)
Zum Beispiel ist dieser Code deguggerfreundlicher:

Code: Alles auswählen

program Project1;
 
var
  i: Integer;
 
begin
  i := Random(2);
  if i = 0 then
    Writeln('Ja');
  Readln;
end. 
als dieser Code:

Code: Alles auswählen

program Project1;
 
begin
  if Random(2) = 0 then
    Writeln('Ja');
  Readln;
end.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Re: Debugger

Beitrag von Andromeda »

ich weiß gar nicht, was ich sagen soll. So viel Erklärung kann man doch eigentlich nicht erwarten. Auf jeden Fall habe das jetzt sogar ich verstanden. Tausend Dank.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Debugger

Beitrag von baumina »

Michl hat geschrieben:Der Debugger kann selbst keine Funktionen auswerten.
Das wäre aber mal höchste Zeit, dass das unterstützt wird. Delphi kann das seit vielen Versionen und ich benutze es ständig.
.

Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Re: Debugger

Beitrag von Andromeda »

baumina hat geschrieben:Das wäre aber mal höchste Zeit, dass das unterstützt wird. Delphi kann das seit vielen Versionen und ich benutze es ständig.
Also ich habe für meine letzte Delphi-Version fast 2000 DM bezahlt und bin sehr dankbar, dass es Lazarus gibt. Ich freue mich über jede Funktion, die mir Lazarus bietet. Es steht jedem frei, Features zu entwickeln, der er haben möchte.

@baumina Sag mir bitte Bescheid, wenn Du den Debugger weiterentwickelt hast.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Debugger

Beitrag von baumina »

Andromeda hat geschrieben:@baumina Sag mir bitte Bescheid, wenn Du den Debugger weiterentwickelt hast.
Ich bewundere Leute wie dich, die all ihre Zeit und ihr Wissen ehrenamtlich anderen zur Verfügung stellen. Ein Lazarus mit allem Drum und Dran zu entwickeln ist sicher keine leichte Aufgabe. Leider reicht weder mein Wissen noch mein Geld aus dich in der Weiterentwicklung des Debuggers zu unterstützen. Du nimmst hoffentlich meine Entschuldigung an, mit dem Hinweis, dass diese Funktion im Debugger fehlt, wollte ich keineswegs deine oder die Arbeit aller anderen ehrenamtlichen Lazarus-Entwickler schmälern. Für alle die Lazarus benutzen (irgendwann werde ich das sicherlich auch tun), ist das eine tolle Alternative zu Delphi.
.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
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: Debugger

Beitrag von m.fuchs »

baumina hat geschrieben:
Michl hat geschrieben:Der Debugger kann selbst keine Funktionen auswerten.
Das wäre aber mal höchste Zeit, dass das unterstützt wird. Delphi kann das seit vielen Versionen und ich benutze es ständig.
Wie funktioniert das? Kopiert der Debugger dann den kompletten Stand im Arbeitsspeicher um keine Seiteneffekte auftreten zu lassen?

Code: Alles auswählen

function GetNextNumber: Integer;
begin
  Inc(ActualNumber);
  Result := ActualNumber;
end;
Diese Funktion würde sonst zu seltsamen Programmverhalten führen. Ich halte das Auswerten von Funktionen durch den Debugger für keine gute Idee.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Debugger

Beitrag von baumina »

m.fuchs hat geschrieben:Wie funktioniert das? Kopiert der Debugger dann den kompletten Stand im Arbeitsspeicher um keine Seiteneffekte auftreten zu lassen?

Code: Alles auswählen

function GetNextNumber: Integer;
begin
  Inc(ActualNumber);
  Result := ActualNumber;
end;
Diese Funktion würde sonst zu seltsamen Programmverhalten führen. Ich halte das Auswerten von Funktionen durch den Debugger für keine gute Idee.
Wie genau das funktioniert weiß ich nicht, aber in deinem Fall ist es tatsächlich so, dass durch die Anzeige von GetNextNumber im Debugger, der Wert um eins erhöht wird.
.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Debugger

Beitrag von baumina »

Wenn ich mir das hier http://wiki.freepascal.org/IDE_Window:_ ... Properties anschaue, dann steht da
Funktionsaufrufe zulassen
noch nicht unterstützt
Deswegen war ich davon ausgegangen, dass das kommen wird.
.

Antworten