Segmentation fault

Alles rund um die Programmierung mit Qt
Antworten
Tomaxx
Beiträge: 71
Registriert: 7. Juni 2017 09:05

Segmentation fault

Beitrag von Tomaxx »

Hallo zusammen

Mir ist es des öfteren passiert, dass bei Probestarts meiner Software urplötzlich ein "segmentation fault" auftrat.
Nachdem ich die gerade gemachten Änderungen rückgängig gemacht habe, blieb der Fehler trotzdem bestehen.
Manchmal war das zum Verzeifeln. Habe ich am nächsten Tag weitergemacht, kam der Fehler nicht mehr.

Ich war sogar schon soweit, dass ich QT de- und reinstalliert habe. Dann war der Fehler auch weg..... Ist aber schon irgendwie lästig!

Irgendwann habe ich dann einfach mal probiert, bei Auftreten des Fehlers den Computer neu zu starten (ohne den Code zurück zu ändern).
Siehe da ---> Kein Fehler mehr!

Ist euch das auch schon so ergangen?

Thomas
Volker75
Beiträge: 59
Registriert: 8. April 2009 21:04

Re: Segmentation fault

Beitrag von Volker75 »

Hört sich so an, als wenn du auf Daten zugreifst, die nicht "richtig" sind.
Kann von Software bis zum Hardwarefehler alles sein.

Ich tippe darauf, dass du auf Daten zugreifst, nicht initialisiert wurden oder die außerhalb eines Arrays liegen. (Bei einem Neustart liegen da "zufälligerweise" Nullen und das Programm läuft scheinbar richtig. Wenn du dann einen PC eine Zeitlang nutzt, dann liegen dort aber andere (alte) Zahlen/Wert (ggf von anderen geschlossenen Programmen); da du die Werte aber nicht initialisierst liest du diese alten Werte => Absturz.)

Tipp:
Nutze mal valgrind zum Prüfen:
http://valgrind.org/
(mit -g compilieren!)

Einen Softwarefehler in Qt halte ich für unwahrscheinlicher (könntest du aber auch mit valgrind prüfen.)

Ansonsten könnte es auch ein Hardwarefehler sein. Könnte natürlich überall versteckt sein, aber so etwas sollte i.d.R. auch bei anderen Programmen zu (unregelmäßigen) Abstürzen führen.
Notfalls mal einen Speichertest machen; z.B. mit memtes86:
https://www.memtest86.com/
Tomaxx
Beiträge: 71
Registriert: 7. Juni 2017 09:05

Re: Segmentation fault

Beitrag von Tomaxx »

Aha, danke für den Tipp.
Ich werde dem mal nachgehen.
Tomaxx
Beiträge: 71
Registriert: 7. Juni 2017 09:05

Re: Segmentation fault

Beitrag von Tomaxx »

Also daran lag es nicht - der Fehler tritt nur auf meinem PC auf.
Interessanterweise passiert er immer, wenn QT nicht als erstes Programm gestartet wird nach einem Neustart.

Lasse ich QT Creator laufen, auch tagelang, passiert das nicht mehr.

Muss also irgendwas an meinem PC sein - hab aber keine Ahnung was das sein könnte.
Volker75
Beiträge: 59
Registriert: 8. April 2009 21:04

Re: Segmentation fault

Beitrag von Volker75 »

"Also daran liegt es nicht" ist eine "gute" Antwort auf "Kann von Software bis zum Hardwarefehler alles sein."

Auch deine jetzige Beschreibung schränkt noch nichts genauer ein.
Wenn du erst ein anderes Programm startest und laufen lässt und dann dein Programm startest: Dann kann es auch von Hardware (zu instabiles Netzteil, kaputter Speicher, ...). Bis zu Software (Nutzung eines Speicherbereiches des anderen Programms) sein.

Auch das "nur auf meinem PC" (aber nicht auf einem anderen) schrängt es streng genommen noch nicht ein. Kann trotzdem von Hardware bis Software alles sein. (Es sei den es handelt sich um einen anderen baugleichen Rechner mit gleicher Software. Dann spricht es eher für einen Hardwaredefekt.)

Ich vermute mal, dass du Memtest hast laufen lassen. Damit kannst du bisher nur sicher die Hardware "Speicher" ausschließen.

Andere Hardwarefehler könnten dir auffallen, wenn du mit anderer Software viel arbeitest (also auch große Programme mit viel Last lange laufen lässt). Gerne auch mal Prime95 und/oder andere Benchmarks laufen lassen um zu gucken ob das System stabil ist. Wenn es dort stabil läuft, dann spricht es eher für einen Softwarefehler. Den würde ich mit Valgrind suchen.

Was hat Valgrind den angezeigt? Der protokolliert doch mit! Wenn du das Protokoll nicht in der Konsole ausgibst, sondern in eine Datei, dann kannst du es doch jederzeit nachlesen. Ist er immer bis zur gleichen Programmzeile gekommen? Dort wird dein Fehler sein.
Oder hast du vergessen mit "-g" zu kompilieren? Dann zeigt valgrind logischerweise nichts an. Bitte in das makefile gehen und "-o2" durch "-g" ersetzen und komplett neu kompilieren (temp Verzeichnis vorher löschen!)

Die Valgrindprotokolle sind manchmal etwas schwer zu lesen. Das gute ist ja, dass du den Absturz reproduzieren kannst. Häng doch mal einfach 2 Valgrindprotokolle hier an, damit wir mal reingucken können.
Antworten