SigSEGV nur im Debuggermode

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

SigSEGV nur im Debuggermode

Beitrag von AlterMann »

Hallo

Ich stelle das mal bei Einsteigerfragen ein, weil ich nicht glaube, daß es mit der Datenbankabfrage direkt zu tun hat und ich keine Ahnung habe worans liegen könnte.

Erst mal die betreffende Routine (obwohl ich beinahe glaube, daß ich den Fehler von woanders verschleppe)

Code: Alles auswählen

begin
 if MySQL51Connection1.Connected then begin
     ShowBusyPanel('Aliases einlesen');
     a := 0;
     ListBox9.Items.BeginUpdate;
     ListBox9.Items.Clear;
     SQLQuery1.SQL.Text := 'select aliasname from alias order by aliasname';
     SQLQuery1.Open;
      while not SQLQuery1.EOF do begin
       ListBox9.Items.Add(SQLQuery1.Fields[0].AsString);
       inc(a);
       StatusBar1.Panels[0].Text:=IntToStr(a);
       StatusBar1.Panels[1].Text:=SQLQuery1.Fields[0].AsString;
       Application.ProcessMessages;
       SQLQuery1.Next;
     end;
     SQLQuery1.Close;
     ListBox9.ItemIndex:=0;
     ListBox9.items.EndUpdate;
     Meldung('Aliasnamen neu eingelesen');
     HideBusyPanel;
   end;
end;
 
Das Programm steigt nach 200 eingelesenen Datensätzen mit SIGSEGV an Adresse xxxxxx aus.
Diesmal nur wenn ich es in Lazarus starte.

Vor ein paar Wochen war's umgekehrt.
Da ist es in der Nachbarroutine (genauso aufgebau, nur andere Tabelle und andere ListBox) mit einer AccessViolation abgehauen, aber nur wenn ich die .exe gestartet hab. Im Debugger nicht.

Ich habe dann (schon nur mehr aus Verzweiflung) die Reihenfolge der beiden vertauscht, und Ruhe war.
Seither hab ich (an ganz anderen Stellen des Programmes) einiges dazuprogrammiert und heute fängt das an :cry:

Die Adresse des Fehlers wird mir nur im Assemblerfenster angezeigt, ich kann es nicht direkt meinem Quellcode zuordnen.

Wenn ich mit F8 zeilenweise ausführe, stürzt es in der Zeile mit SQLQuery1.Next; ab.

Hat wer eine Idee

Danke für's Lesen
Christian
Früher war alles besser. Und aus Holz!

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: SigSEGV nur im Debuggermode

Beitrag von mse »

Funktioniert es ohne "Application.ProcessMessages"?

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: SigSEGV nur im Debuggermode

Beitrag von AlterMann »

mse hat geschrieben:Funktioniert es ohne "Application.ProcessMessages"?
Nein.
Das (und auch die Anzeigen in der StatusBar) hab ich nur zur Fehlereingenzung eingefügt.
Der Fehler ist auch ohne da.

Code: Alles auswählen

begin
 if MySQL51Connection1.Connected then begin
     ShowBusyPanel('Aliases einlesen');
    ListBox9.Items.BeginUpdate;
     ListBox9.Items.Clear;
     SQLQuery1.SQL.Text := 'select aliasname from alias order by aliasname';
     SQLQuery1.Open;
      while not SQLQuery1.EOF do begin
       ListBox9.Items.Add(SQLQuery1.Fields[0].AsString);
       SQLQuery1.Next;
     end;
     SQLQuery1.Close;
     ListBox9.ItemIndex:=0;
     ListBox9.items.EndUpdate;
     Meldung('Aliasnamen neu eingelesen');
     HideBusyPanel;
   end;
end;
 
Früher war alles besser. Und aus Holz!

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: SigSEGV nur im Debuggermode

Beitrag von mse »

Dann würde ich mit -gh (= Heaptrace einchalten) kompilieren um vielleicht eine frühehere Fehlermeldung zu erhalten. Weiter würde ich LCL, FCL und RTL mit debuginfo kompilieren damit der Stacktrace im Absturzfall aussagekräftiger wird.
Ist der Absturz reproduzierbar und immer beim record 201 setze einen Haltepunkt auf "SQLQuery1.Next;", setze 'ignore count' des breakpoints auf 200 und steppe in den 201. Aufruf von "SQLQuery1.Next" mit F7 hinein, vielleicht siehst du die Ursache.

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: SigSEGV nur im Debuggermode

Beitrag von AlterMann »

Nachdem alle Deine Tipps leider keine Lösung brachten, habe ich (aufgrund dieses Beitrages: http://www.lazarusforum.de/viewtopic.php?f=5&t=7615) die neuste Version von Lazarus installiert.

Bis jetzt läuft's problemlos :oops:

Danke trotzdem für die Mühe.
Christian
Früher war alles besser. Und aus Holz!

Antworten