Zugriff auf denn NExt/prev ptr der std::liste



  • du meinst, ich soll das ding im release mode.. testen, und im debugmode coden:) Ist ja nich weiter schlimm hast recht...

    Da stellt sich die frage, welche unterschiede es im relese mode zum debug mode gibt? DAs Programm kann ja im debug mode ohne fehler laufen, aber im release können ja unerwartet fehler auftreten.. oder? was macht der compiler das genau..

    Hab mal gehört das im debug mode Boolean automatisch auf false intialisert werden vom compiler.. im release mode sind sie undefiniert?



  • BorisDieKlinge schrieb:

    Da stellt sich die frage, welche unterschiede es im relese mode zum debug mode gibt? DAs Programm kann ja im debug mode ohne fehler laufen, aber im release können ja unerwartet fehler auftreten.. oder? was macht der compiler das genau..

    Afaik gibt es im Debug-Modus einfach eine Menge mehr Sicherheitsabfragen. Wenn du dir mit new Speicher holst und ein kleines Stückchen darüber hinausschreibst, wird das im Debug gemeldet, im Release bemerkt man es meistens nicht. Von daher sollte man eigentlich nur für das fertige Produkt oder gelegentliche (Performance-)Tests den Releasemodus einschalten.

    und das mit dem bool weiß ich nicht, lässt sich aber sicherlich relativ einfach herausfinden 😉



  • genau, dewegen wäre es inderesant wie don schon sagte, eine hybrid version zu gestalten, wo einige sicherheisabfrage deaktiviert sind und andere nicht.. wie jetzt in dem fall meiner std::list! Wäre also mal interessant zu wissen was ich machen muss das std::list mit release performace arbeitet im debug mode!



  • #ifdef _DEBUG
    #undef _DEBUG
    #include <list>
    #define _DEBUG
    #endif

    oder so?



  • danke aber da kommt ein fehler.. probierst mal aus...

    Wenn debug aktiviert ist , soll er für list debug deaktieren und danach wieder aktiveren ! das passt ihm wohl nich

    Naja der compiler meint wenn einige sachen im debug mode sind und andere nicht gibts evtl. probleme.. schadE;)



  • Im Debugmodus Performance zu testen ist recht sinnfrei. Man würde die performancekritischen Bereiche nicht wirklich erkennen können, wie zB bei diesem Beispiel: Du dachtest die Iteration sei der Flaschenhals und hättest dir eine andere Möglichkeit überlegt die scheinbar schneller ist. Im fertigen Programm(Releasemodus) wäre das aber genau umgekehrt (std::list Iteratoren sind schneller). Man beschäftigt sich also mit den falschen Problemen.

    Zum Initialisieren der Variablen: VC++ initialisiert im Debugmodus _alle_ Variablen, sogar den Speicher, den man auf dem Heap alloziert. Aber du solltest eh nie uninitialisierte Variablen verwenden! Wenn man also ordentlich programmiert kommen solche Probleme, wie "es funktioniert im Debugmodus aber nicht im Releasemodus" gar nicht vor.

    Gruß
    Don06



  • @BorisDieKlinge:
    Der Debug Modus ist nicht dafür da dass keine Fehler auftreten, der ist dazu da Fehler zu finden und das Programm "zu debuggen".
    Angenommen irgendwas funktioniert nicht wie es sollte. Im Debugmodus kannst du mit dem Debugger Zeile für Zeile durch dein Programm steppen, da jegliche Optimierungen ausgeschaltet sind, und Informationen darüber vorhanden sind welche Stücke Code zu welcher Zeile im Programm gehören. Weiters kann man jederzeit alle Variablen und Member einsehen.

    Im Releasemode eliminiert der Compiler dagegen viel an Code wenn er nicht nötig ist, verschiebt Codeteile etc. All das führt dazu dass man das Programm kaum noch vernünftig debuggen kann.

    p.S.: die meisten Compiler erzeugen im Debugmodus sogar Code der dafür sorgen soll dass gewisse Fehler auftreten. z.B. werden Variablen die nicht initialisiert wurden mit bestimmten einfach zu erkennenden Mustern gefüllt (statt das zu beinhalten was auch immer vorher an der Speicherstelle stand die jetzt für die Variable verwendet wird). Oder es werden zusätzliche Bereiche vor und hinter einem dynamisch angeforderten Speicherblock mit bestimmten Mustern gefüllt die dann beim Freigeben wieder überprüft werden, damit man draufkommt wenn mehr Speicher geschrieben wurde als man angefordert hat.



  • Viel lieferen ihre Software im debug modus aus... weil sie angst haben das die software im release nich so funktioniert wie im Debug mode



  • Man sollte beim programmieren auch regelmäßig die Release-Version kompilieren und testen. Wer das vernachlässigt hat es später unnötig schwer Fehler zu finden.



  • Debug Mode schrieb:

    Viel lieferen ihre Software im debug modus aus... weil sie angst haben das die software im release nich so funktioniert wie im Debug mode

    Hätte ich noch nie gehört, ich vermute du schreibst Schwachsinn.

    lolz schrieb:

    Man sollte beim programmieren auch regelmäßig die Release-Version kompilieren und testen. Wer das vernachlässigt hat es später unnötig schwer Fehler zu finden.

    Das kommt drauf an wie man programmiert würde ich sagen. Ich hatte in letzter Zeit (2-3 Jahre) kaum mehr Fehler die schwer zu finden waren, und nix dabei was sich nur im Release Mode manifestiert hätte.


Anmelden zum Antworten