Debugger-Crash

Für Installationen unter Linux-Systemen
Antworten
JWi
Beiträge: 3
Registriert: Mo 11. Aug 2025, 11:14
OS, Lazarus, FPC: Windows, Linux
CPU-Target: 32/64Bit Intel+RPI

Debugger-Crash

Beitrag von JWi »

Hallo,
ich habe da eine kleine Merkwürdigkeit:
-----------------------------------------------------------
var FormMain: TFormMain;
implementation
{$R *.lfm}
// const a:array[0..0] of string=('1'); // globales Array
procedure TFormMain.Button1Click(Sender: TObject);
const a:array[0..0] of string=('1'); // lokales Array
begin
button1.Caption:=a[0]; <------------------------ Breakpoint
end;
------------------------------------------------------------
Rechner: RPI5 mit OS64 , Lazarus 4.0 und FPC 3.2.3

Beim Aufruf ohne Debugger funktioniert das Programm normal.
Ebenso wenn das Array sich im globalen Bereich befindet.
Beim Aufruf mit Debugger, stürzt dieser ab, siehe Anhang.

Unter Windows oder einem RPI4 mit OS32 läuft das Programm ebenfalls normal.
Der Workaround mit dem globalen Array kann doch nicht die Lösung sein.
Dateianhänge
2025-08-11 11_35_52-NAS (210) (NAS) – VNC Viewer.png
2025-08-11 11_35_52-NAS (210) (NAS) – VNC Viewer.png (41.19 KiB) 174 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6910
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: Debugger-Crash

Beitrag von af0815 »

Es ist leider so, das der gute alte GDB nicht unbedingt stabilst mit Pascal arbeitet.
Man kann versuchen die DWARF Variante mit Sets zu verwenden, bzw. auch eine andere GDB Version (älter) hat schon manchmal geholfen.
Dein Target ist nicht unbedingt im Mainstream und deswegen kann es zu sowas kommen. Martin Friebe, meistens im englischen Forum unterwegs, hat sich dem Debuggen angenommen, ich weiß nicht, ob der interne Debugger auf deinem Target läuft. Ev. Wirst du im englischen Forum da mehr Infos zu dem Thema bekommen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Zvoni
Beiträge: 426
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Debugger-Crash

Beitrag von Zvoni »

und was hat das Problem mit Lazarus-Installation unter Linux zu tun?

Ausserdem: Eine "Const" innerhalb einer (lokalen) Prozedur ist keine Konstante, sondern sowas wie eine statische Variable (Behält letzten Wert beim Verlassen der Prozedur)
Ist die "Const" im globalen Bereich wird es zu einer Konstanten.

Ich glaube der Ansatz ist generell falsch
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

JWi
Beiträge: 3
Registriert: Mo 11. Aug 2025, 11:14
OS, Lazarus, FPC: Windows, Linux
CPU-Target: 32/64Bit Intel+RPI

Re: Debugger-Crash

Beitrag von JWi »

und was ist der richtige Ansatz ?

Benutzeravatar
Zvoni
Beiträge: 426
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Debugger-Crash

Beitrag von Zvoni »

JWi hat geschrieben: Mo 11. Aug 2025, 14:16 und was ist der richtige Ansatz ?
Kommt drauf an, was du machen willst.
Soll das "a"-Array wirklich eine Konstante sein, dann muss es in den globalen Bereich (egal ob jetzt unter Interface oder Implementation)

Ich sehe ein Button.Caption:=a[0]

Sieht aus als ob du dynamisch die Beschriftungen von Controls zur Laufzeit ändern willst.
Ist normalerweise ein Fall für Ressource-Strings
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

JWi
Beiträge: 3
Registriert: Mo 11. Aug 2025, 11:14
OS, Lazarus, FPC: Windows, Linux
CPU-Target: 32/64Bit Intel+RPI

Re: Debugger-Crash

Beitrag von JWi »

Das ist nur ein Beispiel.
Der folgende Code führt zu demselben Crash,
auch wenn der Breakpoint vor der Benutzung des Array liegt.
Ohne Breakpoint in der Proedure gibt es kein Problem

procedure TFormMain.Button1Click(Sender: TObject);
Var a:array[0..0] of string=('1'');
s:string;
begin
s:=''; <------------------- Breakpoint
s:=a[0];
end;

Antworten