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.