Seite 1 von 1

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

Verfasst: 29. Oktober 2012 15:20
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

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

Verfasst: 29. Oktober 2012 16:05
von archer
Ich würde mal alle Zeiger in deinem Code überprüfen, ob irgendwo einer nicht initialisiert wird.

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

Verfasst: 29. Oktober 2012 19:50
von Christian81
Wie immer - für Crashes gibt es Debugger! Und ohne Code können wir eh nichts machen außer Glaskugel schauen.

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

Verfasst: 29. Oktober 2012 22:42
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....

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

Verfasst: 30. Oktober 2012 13:06
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...

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

Verfasst: 30. Oktober 2012 15:09
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.

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

Verfasst: 30. Oktober 2012 16:28
von Adiboing
Nein meines Wissens nach "leider" nicht :?

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

Verfasst: 31. Oktober 2012 22:31
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