C++ Applikation mit Qt-Anbindung stürtzt ab weil sie sich anscheinend verhaspelt



  • 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:
    http://www.bilder-hochladen.net/files/9b2l-bc-e46d.png
    http://www.bilder-hochladen.net/files/9b2l-bd-b7b1.png

    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



  • Doch wenn ich diese Applikation als Executable laufen lasse ohne IDE dann stürtzt sie mir einfach mal iwann nach Lust und Laune ab.

    Erfahrungsgemäß würde ich entweder auf einen Speicherüberlauf oder auf eine nicht initialisierte Variable tippen.

    Hänge mal den Application Verifier oder DebugDiag dran, vielleicht finden die was. Aber ich habe da wenig Hoffnung.

    Alternativ musste du einfach von Hand debuggen in dem du erst den Absturz reproduzierst und dann Stück für Stück deinen Code auskommentierst, bis der Fehler nicht mehr da ist.

    Doch wenn ich diese Applikation als Executable laufen lasse ohne IDE dann stürtzt sie mir einfach mal iwann nach Lust und Laune ab.

    Reden wir hier von Debug Version in der IDE und der Release Version ?



  • Bitte ein Bit schrieb:

    Erfahrungsgemäß würde ich entweder auf einen Speicherüberlauf oder auf eine nicht initialisierte Variable tippen.

    +1

    Außerdem kannst du auch release Binaries debuggen. Attach dich einfach mit dem Debugger an den Prozess, wenn der Prozess crasht, sollte der Debugger das fangen und dann siehst du in etwas, wo der Absturz passiert ist. Hilft natürlich nicht immer, wenn es eine Heap Corruption ist, siehst du es nicht direkt, aber vielleicht bekommst du so einen Hinweis.



  • Bitte ein Bit schrieb:

    Doch wenn ich diese Applikation als Executable laufen lasse ohne IDE dann stürtzt sie mir einfach mal iwann nach Lust und Laune ab.

    Reden wir hier von Debug Version in der IDE und der Release Version ?

    Ja, sowohl mit der Debug-Version als auch der Release-Version...

    Mechanics schrieb:

    Außerdem kannst du auch release Binaries debuggen. Attach dich einfach mit dem Debugger an den Prozess, wenn der Prozess crasht, sollte der Debugger das fangen und dann siehst du in etwas, wo der Absturz passiert ist. Hilft natürlich nicht immer, wenn es eine Heap Corruption ist, siehst du es nicht direkt, aber vielleicht bekommst du so einen Hinweis.

    Sobald ich ein Debugger attache wird das Programm "langsamer" und "verhaspelt" sich nicht mehr und es kommt nicht mehr zum Absturtz... Reproduzieren kann ich ihn nicht, er passiert zu verschiedenen Zeitpunkten. Hab schon alles mitgetracked, aber ohne ersichtlichen Erfolg auf einen Codeabschnitt der verantwortlich sein könnte.

    Wie schon gesagt wenn ich die Applikation mittels Dependency Walker laufen lasse kommt es auch zu keinem Absturtz, eben weil die Applikation sich nicht mehr "verhaspelt". Wird wohl trotz allem ein Pointer-Fehler sein. Obwohl ich eine Methode benutz habe um diese Fehler drastisch zu minimieren...



  • Vielleicht eine race condition? Mitunter schwierig zu finden!



  • Nein das kann an und für sich nicht sein...

    Ich habe zwar einen Part im Code der einen Thread laufen lässt aber diesen Part habe ich zuerst auskommentiert, weil dies meine erste Vermutung war.

    Es gibt noch 1 bis 2 Stellen wo ein Programm-Code nach ca 1sekunde erst gerufen wird. Muss mal schauen ob das mit nem wait ist oder thread basiert... Jedoch ist dieser Part nicht mal in Benutzung und das Programm stürtzt dennoch ab...



  • Du kannst Minidumps erstellen lassen, wenn das Programm abstürzt. Gibt mehrere Utitlities, die das können, bzw. kannst auch selber im Programm einen Minidump schreiben lassen. Den Minidump kannst du dann den Stacktrace sehen. Vielleicht wär das eine Möglichkeit, wenns im Debugger nie abstürzt.



  • @KT_Adi
    Guckste mal auf dein 2. Bild.
    Da ist ein Button wo "Debug" draufsteht...
    Rate mal was passiert wenn du da draufklickst.



  • @hustbaer:

    Ich weiß zwar worauf du hinauswillst aber ich selbst nutze das Tool nicht ausgiebig genug als das es abstürtzt und bei anderen Leute, wo es passiert, befindet sich keine IDE 😉

    Also entweder ich selbst widme mich meinem Tool und benutze es um damit arbeit zu tätigen die andere tun. Oder ich installier eine IDE auf einem Rechner...

    Muss doch auch ne schnellere Lösung geben 😃


Log in to reply