Absturz, aber nicht im Debug Modus???



  • Hallo liebe Gemeinde,

    ich habe ein Problem, ich hoffe ihr könnt mir helfen. Ich programmiere zZ an einem Projekt mir Visual Studio 2008 mit einigen externen Bibliotheken und QtGui!

    Ich habe folgendes Problem: Ich habe ein Programm zusammengebaut, welches im Release Modus mit "STRG+F5" ausgeführt wird abschmiert mit der Meldung

    "foo.exe funktioniert nicht mehr" etc.

    Ein klassischer Absturz. Daraufhin habe ich das Projekt im Debugmodus kompiliert und erneut gestartet, in diesem Fall lief es (fehlerfrei) zu Ende.

    Auch im Release-Modus funktioniert das Projekt, wenn ich es mit "F5" starte, nicht aber wenn ich es mit "STRG+F5" starte.

    Mein Problem also:
    Ich habe irgendwo einen Fehler programmiert, den ich durch debuggen so nicht finden kann, da er im Debug-Modus nicht auftritt. Wie würdet Ihr bei einem solchen Programm vorgehen?

    Besten Gruß,
    Timmy



  • Hast du vielleicht im Debug-Modus irgendwelche #defines, die einen Crash verhindern? Gibts irgendwelche Unterschiede in der Funktionalität zwischen Debug und Release á la

    #IFDEF _DEBUG
    ...
    ...
    #ENDIF
    


  • Ich würde mir eine MessageBox einbauen und ausprobieren, ob die erscheint. Wenn ja, ist der Fehler weiter hinten, wenn nein, weiter vorne. Und so eben den Fehler lokalisieren.
    Ist aber relativ mühselig...



  • Sowas resultiert häufig aus einer vergessenen Initialisierung. Im Debug Modus wird (jede?) Variable automatisch mit 0 Initialisiert, im Release Modus ist der Wert undefiniert, sprich er ist einfach das was vorher im Speicher stand, kann aber natürlich auch 0 sein wenn du glück hast. Ich würde also zuerst alle Compilerwarnungen durchgehen.

    Debuggen kannst du dein Programm übrigends auch im Release-Modus, du kannst in den Projekteigenschaften unter Linker->Debuggen "Debuginfo generieren" auf Ja stellen, wie die Variablen initialisiert werden hängt meines Wissens nach nur an den Optimierungseinstellungen.



  • Danke RedPuma, genau das war es.

    Vielen, vielen Dank 👍 🤡



  • Ich hab mich mal aus dem selben Grund totgesucht, hab an einer ganz andern Stelle im Code was verändert und auf einmal schmierte das Programm im Release Modus ab. Ist vorher nie aufgetreten weil die uninitialisierte (mein Gott was viele i's) durch Zufall immer 0 war. Gemein solche Fehler. Bestätigt aber immer wieder meine Vermutung das man beim C++ coden das Gehirn nicht so abschalten kann wie z.B. bei C# *grins*



  • Kleiner Hinweis am Rande: Im Debug-Modus werden alle Variablen nicht mit 0, sondern mit 0xcccccccc vorbelegt.

    Mfg

    Wilfried



  • wilfried.h schrieb:

    Kleiner Hinweis am Rande: Im Debug-Modus werden alle Variablen nicht mit 0, sondern mit 0xcccccccc vorbelegt.

    Super Wilfried.h, jetzt hast Du aber einen gucken lassen tzzzzzz 🙄



  • wilfried.h schrieb:

    Kleiner Hinweis am Rande: Im Debug-Modus werden alle Variablen nicht mit 0, sondern mit 0xcccccccc vorbelegt.

    Mfg

    Wilfried

    Also ich hab wieder was gelernt muss ich sagen. Aber die sinnhaftigkeit dessen lässt doch ein wenig zu wünschen übrig oder?



  • Nein,
    damit kann der Debugger überprüfen, ob eine Variable initialisiert wurde oder nicht. 0xcccccccc wird als Initialisierung in aller Regel nicht vorkommen, 0 schon.

    Mfg

    Wilfried


Anmelden zum Antworten