C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Alles rund um die Programmierung mit Qt
Antworten
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von Adiboing »

Hallo liebe Leute,

ich habe eine C++ Applikation (> 8000 lines) die an und für sich wunderbar funktioniert. Doch wenn ich diese Applikation als Executable laufen lasse ohne IDE dann stürtzt sie mir einfach mal iwann nach Lust und Laune ab.

Das Lustige hierbei ist nun folgendes.
Ich hab die Applikation.exe mal mit dem Dependency Walker(DW) starten lassen um mir evtl Probleme durch geladene DLL's anzuschauen. (Wer den DW nicht kennt, er ist ein Tool der alles hintendran tracked und zur Lauftzeit läuft.)
Dank dem DW stürtzt meine Applikation nun nicht mehr ab auf Wundersameweise...

Ich weiß aber leider nicht woran es nun liegt das sie ohne DW ständig abstürtzt...

Alles was ich beim Absturtzt bekomme ist folgendes:
Bild
Bild

Den Code kann ich schlecht posten da er so groß ist...
Gibt es denn kritische Punkte in der C++/Qt Programmierung wo man leicht solche "Geschwindigkeits-Fehler" machen kann?


Hoffe ihr habt mir paar Tipps ;)

peace Adi
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von archer »

Ich würde mal alle Zeiger in deinem Code überprüfen, ob irgendwo einer nicht initialisiert wird.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von Christian81 »

Wie immer - für Crashes gibt es Debugger! Und ohne Code können wir eh nichts machen außer Glaskugel schauen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von brax »

Gibt es denn kritische Punkte in der C++/Qt Programmierung wo man leicht solche "Geschwindigkeits-Fehler" machen kann?
In der C++ Entwicklung ist es unglaublich leicht, genau solche Fehler zu machen! Wenn Du eine einsteigerfreundliche Sprache suchst, ist C++ ganz sicher nicht das richtige... Was Du allerdings mit "Geschwindigkeits-Fehler" verstehe ich nicht so genau... Btw. es gibt kein C++/Qt es gibt nur C++. Qt ist eine Klassenbibliothek, die zu 100% C++ benutzt. http://www.thealmightyguru.com/Humor/Do ... eFoot.html wobei der Teil von C genauso für C++ zutrifft. Also: JA! Es gibt etwa sehr, sehr viele kritische Punkte an denen man leicht solche Fehler machen kann (tut mir leid, ist aber so) ;)

Wenn etwas mit IDE (=im debug) nicht abstürzt aber im Release, dann sind mit ziemlicher Sicherheit a) uninitialisierte Pointer im Spiel oder b) Du überschreibst irgendwo vorher initialisierten Speicher (auch wieder im Zusammenhang mit Pointern!). Entweder Du guckst Dir also ganz genau an, was Du mit Deinen Pointern machst (wie archer geschrieben hast) oder Du debuggst auf Assembler-Ebene z.B. mit OllyDbg (google). Der sagt Dir (mit ein bißchen Hirnschmalz von Deiner Seite) ziemlich genau in welcher Methode die Adresse "0x000000006502eec0" liegt....

Ansonsten wäre Code hilfreich, der das Problem auf das nötigste minimiert (ja, ich weiß.... >8000 Zeilen, aber 1. ist das noch nicht wirklich groß und 2. kannst Du das Problem möglicherweise auch mit weniger reproduzieren...). Guck mal wo der Debugger Dir den Fehler lokalisiert (also wo er anhält, wenn das Programm abstürzt)!

Evtl. musst Du einstellen, dass der Debugger bei C++ Exceptions anhält. Unter Visual Studio gehst Du dafür unter Debug->Exceptions. Wenn Du dort "Win32 Exceptions" und "C++ Exceptions" anwählst, hält der Debugger immer an, sobald eine Exception geschmissen wird (manche sind auch in Qt schon abgefangen, z.B. wird immer eine Exception geschmissen, wenn der erste Qt FileDialog geöffnet wird [auch die Qt-Jungs sind nicht ganz fehlerfrei ;)]).

Im QtCreator habe ich bisher nur die Möglichkeit gefunden, bei einem Breakpunkt Rechts-click zu machen und dann unter "type" "Break when C++ Exception is thrown" auszuwählen. Keine Ahnung, ob der QtCreator auch anbietet, immer anzuhalten, wenn so eine Exception fliegt....
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von Adiboing »

Danke erstmal an alle für ihre Antworten :)
Mit C++/Qt wollte ich einfach darauf hinweisen das ich C++ mit Qt benutze, sorry wenn ichs iwie falsch ausgedrückt habe :P

Was meinen Programmaufbau bzgl der Pointer angeht sieht es wie folgt aus.
Am Ende meines Konstruktors rufe ich folgende 3 Funktionen auf:

Code: Alles auswählen

createWidgets();
createLayouts();
createConnections();
Diese 3 Funktionen initialisieren mir alle QObjects (Labels, Textfelder, Fenster, Buttons, Layouts, Connections...) von anfang an. Dies bedeutet, alle Pointerobjekte sind vorhanden und werden jenachdem vom Parent als Child zerstört.

Beispiel von createWidgets()

Code: Alles auswählen

mpo_errorText = new QLabel;	// QLabel *mpo_errorText;	befindet sich in der Header-Datei 
Im darauf folgenden Code habe ich akribisch drauf geachtet alle Pointer auch direkt wieder zu zerstören wenn ich sie nicht mehr benötige.

Im Debug-Mode während der Benutzung durch die IDE ist bisdato nie ein Absturtz vorgekommen... Nur wenn ich die Debug.exe ausserhalb benutze, somit aber kein vernünftiges Debugging, abgesehen von jeglichen debugOutputs...
Wenn ich die Debug oder Release.exe ausserhalb der IDE über den Dependency Walker laufen lasse dann klappt alles ohne Probleme und das läuft nun mittlerweile mehr als ein Monat auf Probe ohne Mukken.

Das brachte mich zum Schluss das der Dependency Walker die Applikation ausbremst und sich diese dadurch nciht "verhaspelt". Wird wohl wirklich noch nen Pointer-Error sein...
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von archer »

Löscht du eventuell innerhalb einen Slots das Objekt (QObject) das diesen aufgerufen hat?
Dann solltest du das im Slot mit

Code: Alles auswählen

myObject->deleteLater()
löschen, wenn es dort notwendig ist.
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von Adiboing »

Nein meines Wissens nach "leider" nicht :?
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: C++/Qt Applikation stürtzt ab weil sie sich "verhaspelt"

Beitrag von Troll.Soft »

moin,
ist natürlich fies, wenn der Mist nicht im Debugger abstürzt, sondern nur, wenn das exe gestartet wird. Habe ich auch schon gehabt, war immer einer von den oben angesprochenen Punkten. Versuch es im Notfall mit der Halbiermethode. D.h.: viel Code rausnehmen und schauen ob es noch abstürzt. Wenn nein, liegt der Fehler hoffentlich im rausgenommenen Sourcecodeteil.
tschüß
Troll.Soft
Antworten