Debugtiefe



  • Hallo

    Habe hier ein mir nicht erklärbares Problem.

    Habe eine Applikation erstellt. In dieser habe ich einen pointer auf eine Klasse mit new angelegt. Beim Aufruf von delete erhalte ich einen Fehler. Den Fehler selber habe ich gefunden. Darin liegt nicht mein Problem. Sondern an folgendem.

    Der Fehler tritt bei einem Aufruf im Destruktor dieser Klasse auf. Der Debugger selbst bleibt aber an der Stelle des delete stehen. Nicht mal mit Step Into gelange ich in den Destruktor.

    Bei einem anderen Rechner geht das problemlos. Hier bleibt auch der Debugger an der Stelle stehen wo der Fehler auftritt.

    Gibt es hier irgendwelche Einstellungen, eine Art "Debugtiefe". Habe die Einstellungen der beiden Rechner verglichen. Habe noch keinen Unterschied entdeckt.

    Hat jemand einen Rat?


  • Mod

    Der Heap evtl. schon vorher defekt, dass der delete den virtuellen Destruktor icht aufrufen kann?
    Ist der Source-Code evtl. nicht verfügbar?
    Die PDB Datei passt?
    Release statt Debug Version?



  • Also ich kann nur so viel dazu sagen:

    Ich kann in keinen einzigen Destruktor reindebuggen. Ob es nun einen Fehler gibt oder nicht. Wenn ich Step Into mache ignoriert er das einfach. Wenn ich genau das selbe Projekt an einem anderen Rechner öffne gelingt das Step Into.
    Aber auch bei anderen Projekten. Habe ein ganz einfaches erstellt. Keine Chance, kein Step Into in den Destruktor.

    Damit habe ich glaub die ersten 3 Hinweise abgehandelt.

    Zum 4ten Hinweis: Debug ist eingestellt.

    Was ich im Netz noch gefunden habe:
    http://connect.microsoft.com/VisualStudio/feedback/details/99778/visual-studio-debugger-steps-over-destructor-not-into-for-c-code

    Aber das war ja beim VS2005 das Problem. Habe VS2010 SP1



  • Aber an anderer Stelle im Projekt gehen Haltepunkte? Schon mal Projekt bereinigt bzw. neu erstellt?



  • Hallo _matze

    Ja Haltepunkte gehen. Das seltsame ist das Haltepunkte im Destruktor sogar gehen.
    Also wenn ich nen Haltepunkt im Destruktor setzte bleibt er darin stehen. Nur nicht beim Step Into, oder bei einem Fehler.

    Neu erstellen habe ich natürlich gemacht. Wie gesagt andere Projekte gehen ja auch nicht. Darin liegts denke ich mal nicht.



  • Also wenn ich auf dem delete stehe, kann ich bei mir auch kein StepInto machen...
    Setze ich aber einen Haltepunkt im Destruktor, komme ich rein.

    Ich glaube bei "delete" ging das bei mir noch nie... Delete ist ja in dem Sinne keine Prozedur oder Funktion, in die man "reingehen" kann.
    Das Delete hat ja auch keinen C++-Quellcode in den der Debugger reinspringen kann. Der Destruktor wird irgendwie implizit aufgerufen...
    Der Destruktoraufruf ist auch nur ein "Abfallprodukt" der Speicherfreigabe, wie man bei ANSI-C sieht, denn dort werden keine Destruktoren aufgerufen.

    Ist aber bei mir ne ältere Version von Visual... grad nix anderes zur Hand 😉



  • Hallo It0101

    Bei dem delete hast du recht das geht wirklich nicht. Seltsamerweise zeigen die beiden Rechner aber trotzdem zwei unterschiedliche Verhalten was das debuggen angeht.

    Wenn ein Fehler bei einer Funktion auftritt die im Destruktor aufgerufen wird, bleibt der eine Debuger an genau diesem Aufruf stehen. Am anderen Rechner bleibt der Debugger am Delete stehen.



  • Das ist in der Tat wundersam, dass es anderswo geht, zumal es sich um ja vermutlich um die gleiche IDE handelt... Dafür hab ich jetzt auch keine Erklärung.


Anmelden zum Antworten