Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
ersteinmal
Beiträge: 5
Registriert: So 5. Mai 2024, 18:49

Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von ersteinmal »

Hallo
und schön, daß es Euch gibt, war nicht einfach etwas auf Deutsch zu finden.
Also ich bin recht begeistern, nur hänge ich gerade schon wieder.

Ich wolle meine Bilder sortieren, und dacht mir, eine Indexdatei in die Ordner zu schreiben, in denen der Name, länge etc. steht. Dann wollte ich die Dateien Vergleichen, und und und .....

Aber ich scheiterte als ex. Turbo programmieren der mit (Vor) Delph aufgegeben hat, schon an findfirst. :o
also dachte ich ich nehme die die Funktionen, die es gibt, und scheiterte schon wieder an der Frage warum ich welches Attribut angeben muß. Tja und dann scheint Tstringlist eine Liste zu sein, aber wie sehe ich die.....

Aber zurück zu der Frage: Ich habe als erstes eine Variable (huhu) definiert, aber nicht einmal die sehe ich. Irgendwo fehlt wohl ein haken.

Danke Im Voraus

Carsten
Dateianhänge
Clipboard.png
Clipboard.png (11.41 KiB) 2291 mal betrachtet
finda.pas
(1.21 KiB) 80-mal heruntergeladen

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von wennerer »

Hallo,
ich hab dir mal eine kleine Beschreibung zusammen gestellt. Eventuell hilft dir das weiter.

Viele Grüße
Bernd
Dateianhänge
Debugen.pdf
(454.31 KiB) 96-mal heruntergeladen

djdhg
Beiträge: 18
Registriert: Mo 8. Apr 2013, 17:12
OS, Lazarus, FPC: Win11, Debian 12.5, Lazarus: 2.2.6, FPC: 3.2.2
CPU-Target: 64Bit

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von djdhg »

Hallo "ersteinmal".

versuche mal wie folgt:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Files: TStringList;
  i : Integer;
begin
  // Liste "anlegen"
  Files := TStringList.Create;

  // Suchen
  Files := FindAllFiles('D:\VMs\', '*.*', true);

  // Zeige alle Dateinamen nacheinander an.
  for i := 0 to Files.Count-1 do
  begin
    ShowMessage(Files[i]);
  end;

end; 
Lg

Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von Mathias »

Code: Alles auswählen

  for i := 0 to Files.Count-1 do
  begin
    ShowMessage(Files[i]);
  end;
Eine Konsole und ein Writeln geht auch. Aber einer Dateilist hast du schon eine reissen Klickerrei.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

djdhg
Beiträge: 18
Registriert: Mo 8. Apr 2013, 17:12
OS, Lazarus, FPC: Win11, Debian 12.5, Lazarus: 2.2.6, FPC: 3.2.2
CPU-Target: 64Bit

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von djdhg »

Mathias hat geschrieben: Mo 6. Mai 2024, 08:38 Eine Konsole und ein Writeln geht auch. Aber einer Dateilist hast du schon eine reissen Klickerrei.
Da hast du natürlich Recht. Zu meiner Verteidigung, in meinem Testordner sind lediglich nur 3 Dateien, da hielt sich die Klickerei in Grenzen. :wink:

Lg

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
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: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von af0815 »

Hat zwar nichts mit der Liste der überwachten Ausdrücke zu tun, aber der LazLogger ist für das Debugging auch hilfreich, vor allen ist der mega stabil - Lazarus verwendet den selbst.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 282
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von h-elsner »

@djdhg: Bezüglich Beitrag oben:
Du musst die StringList aber irgendwann wieder freigeben!
Etwa so:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Files: TStringList;
  i : Integer;
begin
  // Liste "anlegen"
  Files := TStringList.Create;
  try   // Sicherstellen, dass das Freigeben in jedem Falle ausgeführt wird, nämlich im finally Block

  // Suchen
    Files := FindAllFiles('D:\VMs\', '*.*', true);

  // Zeige alle Dateinamen nacheinander an.
    for i := 0 to Files.Count-1 do
    begin
      ShowMessage(Files[i]);    // Oder mache mit der Datei (Dateinamen) irgend etwas anders....
    end;
    
  finally
    Files.Free;  // Objekt wieder freigeben
  end;  

end; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
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: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von af0815 »

Bezüglich FindAllFiles https://lazarus-ccr.sourceforge.io/docs ... files.html
Function result
TStringList instance with the file names matching the search criteria. The StringList is created in the FindAllFiles function; you should not instantiate it before calling the function, and it must be freed in the calling routine.

Code: Alles auswählen

begin
  // Liste "anlegen"
  //Files := TStringList.Create;
  Files:= nil; // Um warnings zu unterdrücken, wegen nicht initialiserten Variablen
......
Ansonsten erzeugt man eine Liste, die durch das Ergebnis von FindAllFiles überschrieben wird und hat somit ein Speicherloch.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von Mathias »

Code: Alles auswählen

  for i := 0 to Files.Count-1 do
  begin
    ShowMessage(Files[i]);
  end;
Dies geht ja noch einfacher.

Code: Alles auswählen

ShowMessage(Files.text);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
ersteinmal
Beiträge: 5
Registriert: So 5. Mai 2024, 18:49

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von ersteinmal »

Hallo ihr Lieben und vielen Dank für Eure Mühe.
Ich habe vor einer Stunde mit wennever angefangen.

Und es funktionierte natürlich nicht, aber wenn ich nun hier schreibe muß ich ja noch den Fehler vor dem Bildschirm eliminieren.

Also habe ich den GDB Debugger ein beiden Fällen ausgewählt und habe es auch geschafft, einen Haltepunkt zu erstellen, wo das Programm auch wirklich hält.
Und siehe da die Vorschau ändert sich auf evaluation :)
Aber dann
Clipboard.png
Clipboard.png (14.35 KiB) 2133 mal betrachtet
mit dem Text: While executing the command:
"TGDBMIDebuggerInstruction: "-data-evaluate-expression PASCALFILES^", [ifRequiresThread, ifRequiresStackFrame, ifRequiresMemLimit, ifRequiresArrayLimit] Thr=1 Frm=0"
gdb reported:
"&"../../gdbsrc/gdb/gdbtypes.c:2222: internal-error: type* resolve_dynamic_struct(type*, property_addr_info*): Assertion `TYPE_NFIELDS (type) > 0' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.""

Also habe ich noch einmal die Debugger ausprobiert, und folgendes heraus gefunden:
Nachdem ich den GDB Fehler qittiert habe, gab es eine Anzeige beim Haltepunkt.
Wenn ich den Fp wieder verwende, stoppt das Programm nicht beim Haltepunkt.

Also versuche ich es noch einmal mit dem GDB. Vorher sind aber die Fenster dran.

Schade und Danke soweit.

Carsten.
Die anderen Meldungen habe ich auch noch nicht vergessen!

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von wennerer »

Hallo Carsten,
wenn FPDebug bei dir nicht geht läuft was falsch.
Probier mal folgendes:

Erzeuge eine neue Anwendung und leg nur einen Button drauf. Gib den Code wie folgt ein (oder nimm das angehängte Projekt):

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    i : integer;
    s : string;
    b : boolean;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
 i := 23;
 s := 'Hallo';
 b := true;

 i := 20;
 s := 'Huhu';
 b := false;
end;

end.

Dann stell mal den debug Mode ein, dazu Projekt, Projekteinstellungen, Pfade, bei Erstellmodi auf die drei Punkte ... klicken.
Jetzt Create Debug and Release modes klicken. Es sollte nun der Debugmodus angehakt sein. Alles mit ok verlassen.

Debugmode.gif
Debugmode.gif (1.21 MiB) 2120 mal betrachtet


Dann setzt mal einen Haltepunkt. Jetzt sollte im Watchfenster was zusehen sein.

Debuggen.gif
Debuggen.gif (227.47 KiB) 2120 mal betrachtet
Viele Grüße
Bernd
Dateianhänge
project1.zip
(139.45 KiB) 68-mal heruntergeladen

martin_frb
Beiträge: 588
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: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von martin_frb »

Also zuerst mal: Welches OS? Welche CPU? Und 64 oder 32 bit.

Für Linux oder Windows, mit Intel (oder AMD) Cpu => FpDebug.

----

Variablen sollten dann angezeigt werden. Was weder Gdb, noch FpDebug kann sind "properties" (StringList.Count oder StringList.Text)

Mit FpDebug kann man aber Funktionen aufrufen, also: Stringlist.Get(0)
Aber das muss man einstellen.
- In den globalen Optionen erlauben
- Und in den Einstellungen des "überwachten Ausdruck" auch.

Und: Nicht alle Funktionen sind aufrufbar. In der Regel: virtuelle/overridden aus der LCL / und Methoden eigener Klassen.

----

TStringList => mit FpDebug => in Lazarus 3.0 oder 3.2

Code: Alles auswählen

MyStrList.FList^[0..MyStrList.FCount-1].FString
https://wiki.freepascal.org/FpDebug-Wat ... th_mapping

Benutzeravatar
ersteinmal
Beiträge: 5
Registriert: So 5. Mai 2024, 18:49

Re: Warum zeigt die Liste der überwachten Ausdrücke nichts an?

Beitrag von ersteinmal »

Hallo Ihr Lieben und vielen Dank für Eure Reaktionen.

Ich hatte die Oberfläche noch nicht verstanden, jetzt zeigt - am richtigen Punkt auch das Überwachungsfenster die richtigen Werte an.

Mein Hauptproblem war ja, daß ich - Mal eben - Meine Dateinamen in Ordnern in eine Tabelle packen wollte.
Und genau! @martin_frb Ich habe es auch dann geschafft, mich durch die Funktionen zu hangeln, bis ich:
Function InternalFindFirst (Const Path : UnicodeString; Attr : Longint; out Rslt : TAbstractSearchRec; var Name : UnicodeString) : Longint;
begin
Name:=Path;
Rslt.Attr:=attr;
Rslt.ExcludeAttr:=(not Attr) and ($1e);
{ $1e = faHidden or faSysFile or faVolumeID or faDirectory }
{ FindFirstFile is a Win32 Call }


gefunden habe. Denn ja ich habe ein 64Bit System.

Prozessor Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz 2.60 GHz
Installierter RAM 32,0 GB (31,9 GB verwendbar)
Geräte-ID 8C22AA0F-6423-43EA-8BD8-156301DE8CF8
Produkt-ID 00331-20160-00000-AA828
Systemtyp 64-Bit-Betriebssystem, x64-basierter Prozessor


Gibt es denn ein Findfirst für 64bit?

Carsten

Antworten