Hi,
ich will ein Programm schreiben, dass ich 1. für Windows und Linux compilieren kann und das 2. Threads verwendet.
Anfangen tue ich erstmal mit der Linux-Variante - und da bekomm ich eine
Exception SIGFPE.
Nun denk ich mir, guckste mal wo genau die herkommt, also Breakpoint rein (in die Execute von dem Thread) und durchsteppen. Nach ein paar Steps bleibt es immer hängen. Ich kann nur noch den Mauszeiger bewegen, aber ich kann klicken wie ich will, nichts passiert, auch wenn ich außerhalb von Lazarus klicke. Ich kann auf der Tastatur drücken, was ich will.
Strg+Alt+Rück bzw. Strg+Alt+Entf helfen auch nicht, mir bleibt anscheinend nichts anderes mehr übrig als der Reset-Knopf. Und das immer kurze Zeit nachdem ich den Thread debuggen angefangen habe. Er steht nicht immer an der gleichen Codestelle, daran liegts wohl also nicht.
Versionen:
Lazarus 0.9.26-4 (i386-linux-gtk)
Ubuntu 9.04 / Linux 2.6.28-14-generic (alles auf dem Stand wie es der Paketmenager gerade für aktuell hält))
[edit]
Ergänzung: Starte ich das Programm in gdb dann meldet dieser keine
Exception und es scheint auch soweit es gerade läuft zu klappen. Ich dachte Lazarus verwendet gdb als Debugger???
Ist da was falsch konfiguriert?
[/edit]
[edit=2] Wenn ich in einer Konsole gdb mit dem Programm geöffnet lasse (auch ohne es dort auszuführen) kommt es gar nicht mehr zu der SIGFPE??? [/edit]
[edit=3] Doch, gerade eben (direkt über gtk) schon, laut Stacktrace beim Setzen von Progressbar.Max aus dem Synchronize in dem Thread, in irgend was vom gtk. Und des öfteren kam irgendwo in einem ProgressBar Code ein Fehler den X11 gemeldet hat. Also ursprüngliches Problem zumindest soweit gelöst: Ich weiß, woher die
Exception kommt, die ProgressBar von Lazarus (oder das Synchronize?) ist buggy. Nur warum ich nicht per Lazarus debuggen kann ist immer noch offen. [/edit]
Gruß
Felix