Segmentation Faults: Das Leiden hat ein Ende

Alles rund um die Programmierung mit Qt
Antworten
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Segmentation Faults: Das Leiden hat ein Ende

Beitrag von franzf »

Ein großes Problem, mit dem nicht nur C++-Anfänger zu kämpfen haben, sind Segmentation Faults, kurz SegFaults, zu Deutsch Speicherzugriffsfehler. Sie führen zum sofortigen Abbruch des Programms und sind damit für den Nutzer ärgerlich, noch mehr aber für den Programmierer, da er die Ursache für den SegFault finden muss.
Diesem Problem hat sich nun eine Eintwicklergruppe um den angesehenen freien Qt-Supporter Ogies Noraa angenommen, das Ergebnis ist erstaunlich!
Es wird ein neues Event eingeführt - QSegFaultEvent - welches man in einer von QObject abgeleiteten Klasse über die Implementierung der protected-Methode "segFaultEvent(QSegFaultEvent*)" abfangen kann. Weiterhin gibt es für die Diagnose die Klasse "QSegFaultBacktrace". Funktionieren tut dies natürlich auf allen von Qt unterstützten Plattformen.
Eine einfache Implementierung könnte dann so aussehen:

Code: Alles auswählen

class MyObject : public QObject {
protected:
    virtual void segFaultEvent( QSegFaultEvent* e ) {
        logger() << e->backtrace();
    }
};
Bei einem SegFault muss der Programmierer also nur noch nach dem Logfile fragen, und nicht erst über scripte das Programm in einem Debugger ausführen lassen.

Eine Alternative besteht darin, das event über QApplication::event() abzufangen. So kann man global SegFaults - auch von nicht-QObject-Klassen! - abfangen.

Was aber absolut verblüffend ist: man kann mit QSegFaultEvent::ignore() und QSegFaultEvent::accept() selber entscheiden, wie das Programm nach dem Auftreten des SegFaults reagieren soll. Per accept() wird sich das Programm beenden, so wie man das bisher gewohnt ist.
Setzt man aber ignore(), so stellt Qt den letzten stabilen Programmzustand wieder her, das Programm läuft von diesem Punkt aus weiter.
Ogies Noraa schreibt selber
This is THE milestone in C++ Development. It was alot of work, but the result is magnificent! At this point, Developers should stop using their old Frameworks and start learning Qt.
Außerdem scheint mittlerweile sicher, dass Microsoft Windows Mobile auf Nokia-Hardware keine große Zukunft hat. Die Vorteile dieser neuen Errungenschaften hat Nokia dazu bewogen, die Arbeit an MeeGo mit doppelter Entwicklerzahl voran zu treiben.

Ab Qt-4.8 werden die entsprechenden Klassen verfügbar sein. Es wird ein ganzes Modul "Qt Debugger" zur Verfügung stehen, mit dem die Analyse für den Nutzer unbemerkt während der Laufzeit des Programms stattfinden kann.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Meine erste Reaktion: SUPPPER - jetzt können Progger die nicht Proggen können ihre Fehler Ignorieren ;)
Zuletzt geändert von padreigh am 1. April 2011 15:39, insgesamt 1-mal geändert.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
bronko
Beiträge: 40
Registriert: 19. Mai 2009 15:49

Beitrag von bronko »

April, April :?:
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Naja, die OCI Library hat mit dem 11er Client auch per Default einen Handler für SIGSEGV angemeldet ( :evil: ) ... so weit hergeholt ist das gar nicht ;)

Nur der Rest wirkt etwas unglaubwürdig :D
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

pfid hat geschrieben:Nur der Rest wirkt etwas unglaubwürdig :D
Aber man wird wohl noch träumen dürfen :P

Man merkt, man kann euch nix vormachen. :( Ich hab mir aber auch einen verflixt dummen Tag ausgesucht...
Antworten