GDB Probleme/Bugs

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Nimral
Beiträge: 390
Registriert: Mi 10. Jun 2015, 11:33

GDB Probleme/Bugs

Beitrag von Nimral »

Hi,

:cry: Man(n) wird mutiger und wagt sich mit Lazarus/FPC an ein etwas größeres Projekt.

Nach anfänglicher Begeisterung folgt nun das Autsch. Der Debugger ist nutzlos, und das K.O. einer Hauptkomponente ist K.O. für das Gesamtprodukt. Projekt steht still, und alle die hier immer schon gewusst haben dass man Windows Software nur noch mit Visual Studio und .net Framework entwickeln kann reiben sich heimlich die Hände.

Umgebung: Lazarus 1.4.4 FPC:2.6.4 GDB: 7.2, WIndows 7 x64, gestartet im Admin-Konzext.

Derzeit quälen mich konkret folgende Fehler:

- Geister-Breakpoints.
Der Debugger stoppt an Stellen, an denen kein Breakpoint gesetzt ist. Kein Hinweis auf den Grund für den Stopp im Debugger-Ereignisprotokoll-Fenster. Blöd, wenn das mitten in einer Schleife passiert, die 10.000 mal aufgerufen wird. Der betroffene Code befindet sich in einer externen Library (StringHashList.pas). Bereits probiert: alle Breakpoints gelöscht, Lazarus beendet und neu gestartet, GDB Prozess abgeschossen und neu gestartet; an der fälschlich stoppenden Zeile einen Breakpoint gesetzt und ihn wieder entfernt, kompletten Call-Stack abgeklappert (kein Breakpoint unterwegs), komplettes Projekt aufgeräumt und neu kompiliert. Alles ohne Wirkung, der Debugger stoppt bei jedem Durchlauf wieder an der betroffenen Stelle.

- Abstürze des Debuggers beim Beenden des debuggten Programms:

"GDB has encuntered an internal Error" ...

danach:

While executing the command:
"TGDBMIDebuggerInstruction: "-file-exec-and-symbols ", "
gdb reported:
"&"../../gdb-7.2/gdb/printcmd.c:1916: internal-error: clear_dangling_display_expressions: Assertion `objfile->pspace == solib->pspace' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.""

Diese Meldung erhalte ich nur, wenn folgender Code durchlaufen wird:

Code: Alles auswählen

 
procedure TForm1.OpenSourceFileButtonClick(Sender: TObject);
begin
  OpenSourceFileDialog.FileName:=SourceFileEdit.Text;
  DisplayMessage('Dateisystem lesen ...');
  OpenSourceFileDialog.Execute;
  DisplayMessage('');
  SourceFileEdit.Text := OpenSourceFileDialog.FileName;
  If TargetFileEdit.Text = '' Then TargetFileEdit.Text := TargetFileCreateName(SourceFileEdit.Text);
end;


Auszug aus der Deklaration von TForm1

Code: Alles auswählen

  TForm1 = class(TForm)
    StartButton1: TButton;
    OpenSourceFileButton: TButton;
    OpenTargetFileButton: TButton;
    SourceFileEdit: TEdit;
    TargetFileEdit: TEdit;
    SourceFileLabel: TLabel;
    OpenSourceFileDialog: TOpenDialog;
    OpenTargetFileDialog: TOpenDialog;
    ProgressBar1: TProgressBar;
    TargetFileLabel: TLabel;
    StatusBar1: TStatusBar;
...
 


Offenbar verschluckt sich der Debugger am TOpenDialog, kommentiere ich dessen .execute Aufrufe auf (oder drücke ich den Button nicht ...) stürzt der Debugger beim Beenden des Programms nicht ab. Ein Zusammenhang mit dem "Geister-Breakpoint" Problem ist unwahrscheinlich, das Absturz-Problem quält dieses Projekt von Anfang an (2 Wochen ...), das Problem mit den Geister-Breakpoints kam vor einigen Tagen dazu.

Hat jemand einen nützlichen Rat, was ich tun kann?

Thx

Armin.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: GDB Probleme/Bugs

Beitrag von af0815 »

Ist von der Wiki der Artikel bekannt http://wiki.lazarus.freepascal.org/GDB_Debugger_Tips
Ziemlich weit unten ist was fūr dich interessantes.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: GDB Probleme/Bugs

Beitrag von Michl »

af0815 hat eigentlich schon alles gesagt, trotzdem,

- unter Windows sollte man möglichst mit einer 32bit Lazarusversion entwickeln, da der Debugger bei der 64bit Version Probleme hat
- wenn man das Projekt dann fertig hat, kompiliert man das mit einer 64bit Lazarusversion zu einer 64bit Anwendung (oder nutzt den Crosscompiler - geht auch recht einfach)
- mit einigen Dialogen kommt der Debugger nicht klar und das ist bekannt, deshalb steht bei mir --eval-command="set auto-solib-add off" in den Debuggeroptionen
- mit STRG + ALT + B (geht auch über Menü) kann man sich alle Breakpoints anzeigen lassen und mit der Bürste wegfegen
- falls man einen Bug entdeckt, gibt es viele Möglichkeiten damit zu verfahren, jammern ist die sinnloseste

Sorry, ich freue mich über ein Bug, versuche ihn zu minimieren und wenn möglich zu fixen, hier im Forum nach Rat zu fragen oder eine Meldung evtl. mit Lösung im Bugtracker hochzuladen.

Code: Alles auswählen

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

martin_frb
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: GDB Probleme/Bugs

Beitrag von martin_frb »

- Geister-Breakpoints.


Achtung: Ein breakpoint in C:\abc\foo.pas gilt fuer die unit "foo", egal in welchem Ordner.
http://forum.lazarus.freepascal.org/ind ... #msg200553

2) Oeffne das Fenster im Menu: "View" > "Debug Fenster" > Debug Output
und kopiere die Meldungen.

GDB sollte eine Meldung:

Code: Alles auswählen

*stopped....reason=....

ausgeben.
Die scrollt aber hoch, weil die IDE dann Kommandos sended um Stack etc zu lesen.

- Abstürze des Debuggers beim Beenden des debuggten Programms:

http://wiki.lazarus.freepascal.org/GDB_ ... xpressions

OpenDialog ist "schuld" weil alle moeglichen dll geladen werden (shell execute Handler von anderen Programmen)

Warf
Beiträge: 1909
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: GDB Probleme/Bugs

Beitrag von Warf »

Lazarus verwendet den GDB zum Debuggen, und wenn es bei dir absolut nicht funktionieren will würde ich zunächst einmal versuchen eine neue Version des GDB's zu installieren und zu Testen, aber die Lösungen zu deinen Problemen wurden hier ja eigentlich schon für die mitgelieferte Version beschrieben

Antworten