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.
Debugger-Crash
-
- Beiträge: 3
- Registriert: Mo 11. Aug 2025, 11:14
- OS, Lazarus, FPC: Windows, Linux
- CPU-Target: 32/64Bit Intel+RPI
Debugger-Crash
- Dateianhänge
-
- 2025-08-11 11_35_52-NAS (210) (NAS) – VNC Viewer.png (41.19 KiB) 173 mal betrachtet
- 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
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.
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).
- 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
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
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.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 3
- Registriert: Mo 11. Aug 2025, 11:14
- OS, Lazarus, FPC: Windows, Linux
- CPU-Target: 32/64Bit Intel+RPI
Re: Debugger-Crash
und was ist der richtige Ansatz ?
- 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
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.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 3
- Registriert: Mo 11. Aug 2025, 11:14
- OS, Lazarus, FPC: Windows, Linux
- CPU-Target: 32/64Bit Intel+RPI
Re: Debugger-Crash
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;
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;