[gelöst] Wie testen wo Daten verloren gehen
-
Ich habe folgendes Konstrukt
Calculation.setCouplerElementSettings(& CurrentSettings); Calculation.createCoupler(); CurrentSettings = Calculation.getCouplerElementSettings();Ich übergebe eine Klasse and die Klasseninstanz Calculation, sieht so aus:
void CouplerCalculation::setCouplerElementSettings(CouplerCalculationSettingsDef * value) { CouplerListEntry->Settings = *value; Settings = & CouplerListEntry->Settings; }innerhalb von 'createCoupler()' stimmen die Werte von 'Settings' immer. Aber sobald ich darauf mit getCouplerElementSettings() zugreife steht nur noch Müll drin:
CouplerCalculationSettingsDef CouplerCalculation::getCouplerElementSettings() { return *Settings; }wie könnte ich jetzt nach dem Fehler suchen?
Matthias
-
Du solltest dir einen Debugger anschaffen, der bei jeder vernünftigen IDE eigentlich dabei ist. Da es wohl Leute (wie mich) gibt, die keine IDEs für kleine Projekte benutzen, kann ich denn GDB aus der GNU-Toolchain empfehlen (jaja ich weiß, CLI-Gehacke bis zur Vergasung, wayne).
-
Debuggervertreter schrieb:
Du solltest dir einen Debugger anschaffen, der bei jeder vernünftigen IDE eigentlich dabei ist. Da es wohl Leute (wie mich) gibt, die keine IDEs für kleine Projekte benutzen, kann ich denn GDB aus der GNU-Toolchain empfehlen (jaja ich weiß, CLI-Gehacke bis zur Vergasung, wayne).
Ich debugge mit Visual Studio. Das ist auch nicht das Problem. Mein Problem ist das bis zum Ende der Funktion createCoupler die Werte stimmen und beim nächsten Zugriff auf das Element aus der Klasse die Werte Murks sind.
-
Wenn du schrittweise (in kleinstmöglichen Schritten) die Werte untersuchst, kannst du den Fehler nicht weiter eingrenzen? Oder mit Haltepunkten, die auf Veränderung der Variablen reagieren?
-
Sofern du nichts mit Threads machst, findest du den Fehler, wenn du da Schrittweise durchgehst.
-
konnte den Fehler doch finden, auch wenn ich nicht komplett verstehe was passiert
void CouplerCalculation::addCouplerEntryToList() { CouplerList->push_back(*CouplerListEntry); }wird in createCoupler() ganz am Ende aufgerufen.
Habe aber festgestellt, dass diese Zeile eh nicht mehr gültig ist (im sinne der Programlogik). Danach funktioniert es jetzt.