VS2005 verliert this Zeiger


  • Administrator

    Hast du die Release Version debuggen wollen?

    Grüssli



  • Dravere schrieb:

    Hast du die Release Version debuggen wollen?

    👍
    Genau. Das wollte ich auch noch fragen.



  • Ich werd verrückt,

    also die Funktion tut was sie soll, nur VS kennt eben die Klasse nicht mehr beim Debuggen der Funktion.

    Also das darf ja ned war sein.

    Danke an alle.

    Aber jetzt habe ich Folgefrage. Wenn ihr mir dafür paar Minuten Zeit gebt, wäre super, ich brauch echt Hilfe.

    Danke erstmal.



  • C++Neuling2 schrieb:

    Aber jetzt habe ich Folgefrage. Wenn ihr mir dafür paar Minuten Zeit gebt, wäre super, ich brauch echt Hilfe.

    Und die Frage willst du uns gar nicht näher erläutern, oder wie? 😃

    Antworte auch mal auf Draveres Frage.



  • _matze schrieb:

    C++Neuling2 schrieb:

    Aber jetzt habe ich Folgefrage. Wenn ihr mir dafür paar Minuten Zeit gebt, wäre super, ich brauch echt Hilfe.

    Und die Frage willst du uns gar nicht näher erläutern, oder wie? 😃

    Antworte auch mal auf Draveres Frage.

    Er braucht halt ein paar Minuten. 😛

    Die obige Frage hat sich denke ich erledigt, oder nicht? - Es wird einfach falsch angezeigt.



  • drakon schrieb:

    Die obige Frage hat sich denke ich erledigt, oder nicht? - Es wird einfach falsch angezeigt.

    In der Release version (auch mit Symbolen) fehlen häufig eine Menge daten. Ich würde es nicht als falsch angezeigt bezeichnen. Mehr als 'Information nicht vorhanden' 😉



  • Hallo,

    also sorry, was meint ihr mit Release Version? Von was denn?

    Nun die andere Frage:

    Also ich habe in der Klasse aA (in einer .lib) einen static Pointer ptX, der während der Programmausführung eine Adresse zugewiesen bekommt.
    Am Beginn dre lib wird er gleich NUll gesetzt.

    Die beiden Projekte, also das der Klasse T als auch das der Klasse M arbeiten mit Funktionen von aA und verweisen somit auf dieses Projekt.

    Wenn ich nun aus der Klasse A heraus über pt->Funktion von aA(dort rein virtuell aber in M implementiert) quasi in die Klasse M springe, ist der Zeiger der Klasse aA, also ptX = NULL.

    Es sieht so aus, als ob beide Projekte, also T und M die .lib dazubinden und die Variablen somit voneinander unabhängig bestehen. Liege ich da richtig udn wenn ja, wie kann ich es realisieren, dass in beiden Projekten die Werte der Variablen, die in der -lib angelegt sind gleich sind?

    Danke.



  • Bei den beiden Projekten, welche die lib verwenden, handelt es sich da um verschiedene Prozesse?



  • Nein, es ist keine Multthreading Anwendung.

    Ich habe gerade was probiert. Alle anderen Variablen (sind klassische Membervariablen) in dieser .lib sind in beiden Projekten gleich, nur die static Variable nicht.

    Diese setze ich am Anfang der lib ja auf NULL, muss ich ja bei static Variablen.

    Ich glaub es ist ein dummer Fehler geb ich ehrlich zu, aber ich bring es einfach nicht raus wieso es so ist, vor allem wieso der Unterschied zwischend en static Variablen un dden "normalen" Member Variablen.

    Danke.


  • Administrator

    C++Neuling2 schrieb:

    also sorry, was meint ihr mit Release Version? Von was denn?

    Grundsätzlich mit jedem Kompiler kann man einen Debug- oder Release-Build machen. Das kannst du unter VS oben in einer Combobox auswählen (Debug oder Release). In der Debug Version werden keine Optimierungen durchgeführt, wodurch die Debugsymbole immer noch perfekt auf den Code abgebildet werden können. In der Release Version ist das meistens nicht mehr so gut abbildbar und wenn man es sich dann per Debugger anschaut, scheinen Informationen zu fehlen oder es wird etwas völlig verkehrtes angezeigt.

    Daher eben auch die Frage, weil du womöglich versehentlich auf den Release-Build umgestellt hast und nun probierst diesen zu debuggen 😉

    Grüssli



  • Danke für die Antwort, aber ich bin dem Phänomen auf der Spur.

    Also zunächst hab eich Debug eingestellt.

    Also in der besagten Funktion, in der kein this Zeiger mehr da war, kommt er plötzlich beim Debuggen wieder, wenn man auf Member der Klasse M zugreift. Komisch aber wahr, liegt also irgendwie an VS2005.

    Aber nun zu dem Phänomen mit den static Variablen.

    Also ich habe in der Klasse T einen Zeiger vom Typ aP einen Instanz der Klasse M zugewiesen(M ist von aP abgeleitet).
    Wenn ich nun im Debugger mir Details ansehe von aP, dann zeigt er einen Bereich an vom Typ M, der einen Typ von aP enthät udn dort steht dre Pointer ptX (static Variable von aA).
    Zugleich steht auf gleicher Ebene wie der Typ M alle Variablen vom Typ aP, also wieder ein ptX.

    Mache ich nun in der Klasse M : this->ptX = 7, dann steht nur in aP der wert 7 drinnen und bei M Untergruppe aP ein Default Wert. Mache ich aber nun aP::ptX = 9, dann steht dieser Wert bei M Untergruppe aP drinnen und er andere ptX bleibt unverändert.

    Ich dachte man kann auf static Variablen auf zweierlei Arten zugreifen:
    Instanz->staticVariable oder Klasse::staticVariable.

    Hier macht er aber Unterschied, wieso?

    Danke.

    PS: Das ist doch der Wahnsinn 🙂


  • Administrator

    C++Neuling2 schrieb:

    Also in der besagten Funktion, in der kein this Zeiger mehr da war, kommt er plötzlich beim Debuggen wieder, wenn man auf Member der Klasse M zugreift. Komisch aber wahr, liegt also irgendwie an VS2005.

    Hast du auch die Library im Debug-Modus kompiliert? Es reicht natürlich nicht, wenn nur dein Hauptprojekt im Debug-Modus kompiliert wird. Jegliche Bibliothek, welche du verwendest, muss entsprechend kompiliert werden, wenn du darin debuggen möchtest 😉

    C++Neuling2 schrieb:

    Instanz->staticVariable oder Klasse::staticVariable.

    Auf static Variablen greift man immer über die Klasse zu und nie über das Objekt. Die gehören ja auch nicht dem Objekt 😉
    Deinen Beschreibungen kann ich aber nur schlecht folgen, erst recht bei solchen nichtsaussagenden Bezeichner, die kann man gar nicht im Kopf behalten. Kannst du nicht mal ein minimales Beispiel angeben, wo der Fehler reproduziert wird?

    Grüssli



  • Hallo,

    danke an alle, ich hab noch selber stundenlang gesucht und das Projekt verkleinert bis auf das Allernötigste.

    Ich will das Problem und die Lösung kurz beschreiben:

    Also ich hatte Basisklasse class Base mit static int x, die ich in der Basis.cpp mit 777 initialisierte.
    Davon abgeleitet wurde class Kind.

    Wenn ich nun von Außen einfach Basis::x = 999 machte, zeigte Compiler beim Debuggen beim der Instanz von Kind zweierlei an:

    InstanzKind
    [Kind]
    Basis
    x = 777
    x = 999

    Es lagen also zwei verschiedene Werte von x vor.

    Griff ich nur über Funktionen der Klasse Basis oder Kind auf x zu, so gab es beim Debuggen nur ein x und die welt war OK.

    InstanzKind
    [Kind]
    Basis
    x = 777

    Ich glaube es hängt damit zusammen, dass die Klasse Base in einer .lib war udn die Klasse Kind in einer Dll.

    Aber hauptsache ich habe ienen Weg gefunden wie esgeht, danke für alle die geholfen haben.


Anmelden zum Antworten