[VS2008]Unterschiede Debug und Release Version



  • Hallo Allerseits,

    ich schreibe mit VS2008 unter Win7/64Bit ein C++ Plugin, das zu bestimmten Zeitpunkten Positionsänderungen von Punkten im Raum berechnet und anzeigt.

    Das funktioniert mit im Debugging-Mode erzeugten Plugins soweit schon alles ganz gut, nur wenn ich eine Release-Version Compiliere, dann geschieht es manchmal, dass die Positionen der Punkte (das betrifft dann aber auch alle) nicht mehr definiert sind. Eine zu debugging-Zwecken eingerichtete Ausgabe auf der Konsole ergibt dann z.B. für eine errechnete Positionsänderung

    -1.#QNAN0, -1.#QNAN0, -1.#QNAN0

    Das tritt aber nicht immer und auch nicht regelmäßig auf. In den Compiler-Options ist für beide Versionen (/fp:precise) gesetzt.

    Hat jemand einen Tipp, oder Erfahrung, wie man am besten vorgeht um so einen Fehler auszumerzen?

    Schönen Gruß und Danke einstweilen,
    Martin


  • Mod

    In der Debug Version werden Variablen mit einem Standard Wert initialisiert. In der Release Version sind diese Zufällig.
    Dein Programm kommt evtl. mit den initialisierten Werten klar, aber nicht mit den zufälligen Werten auf dem Stack.

    Man kann auch eine Release Version debuggen.



  • Hallo Martin,

    vielen Dank für die Tipps. Die Initialisierung der betreffenden Variablen wird im Konstruktor explizit vorgenommen. Ich habe mich, wie ich gerade lese auch etwas unklar ausgedrückt. Eigentlich ist es so, dass sich sowohl release, als auch debug Versionen, welche über VS2008 mittels [F5] "debugging starten" ausgeführt werden anders verhalten, als wenn ich dieselbe Plugin-Version über das Programm direkt ausführe. Bei den sich fragwürdig verhaltenden Elementen handelt es sich übrigens um mittels new Operator dynamisch erzeugte Objekte, welche demnach auf dem Heap angesiedelt sein müssten.
    Hier weiß ich einfach nicht mehr, wie ich bei der Fehlersuche vorgehen soll. Von VS aus gesehen scheint ja immer alles o.k.. Ich weiß, mit den wenigen Informationen kann man sicher keine detaillierten Analysen anstellen, ich hoffte nur, dass vielleicht jemand ein ähnliches Problem zu lösen hatte und sagen kann "versuchs mal so", oder "schau mal da", denn ich stehe gerade auf dem Schlauch.

    Schönen Gruß,
    Martin



  • Du kannst auch das Plugin innerhalb des Programms debuggen. Du musst nur entweder das Programm als "Host" zum Debuggen angeben (so wie du ja auch jetzt schon einen Host haben musst, denn eine DLL kannst Du ja nicht so ohne weiteres debuggen), oder aber du startest Dein Programm und verbindest den Debugger dann mit "mit Prozess verbinden" im Debug-Menü von VS.


  • Mod

    Attache Dich doch nachträglich auf den Host und Debugge (Attach to Proecess).

    Solche Fehler kommen dennoch durch nicht initialisiere Variablen. Oft unterscheidet sich der Stackinhalt beim Debuggen und das führt dann zu unterschiedlichem Verhalten.



  • Hallo Martin und Morle,

    erst mal vielen Dank für Eure Hilfe. Immer wieder ein tolles Gefühl nach 3 Tagen Suche seiner eigenen Schlamperei auf die Spur gekommen zu sein...
    Die Debugging-Variante "an den Prozess anhängen" hatte ich nicht in meinem Repertoire. Das hat letztendlich die entscheidenden Hinweise geliefert...
    Wie vermutet war es ein Initialisierungsproblem, welches nur auf diese Weise zu sehen war.

    Schönen Gruß,
    Martin


Anmelden zum Antworten