Was ist der Unterschied zwischen der Debug- und Release-Version eines Programmes in C++?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Ganz grob zusammengefasst:

Eine Debug-Version einer ausführbaren Datei (oder Bibliothek) enthält Teile des Originalquelltextes (auch Debuggingsymbole) und der Bytecode wird i. d. R. nicht optimiert, läuft also langsamer.

Die Release-Version hingegen ist für Endkunden bestimmt, und enthält dementsprechend keine überflüssigen Symbole mehr (ist also "gestripped") und der Maschinencode dürfte mit einem deutlich höheren Optimierungslevel kompiliert worden sein.

Es gibt zwischen diesen beiden gängigen Varianten übrigens noch viele weitere Versionen, die für verschiedenste Tests gedacht sind. Der Übergang ist hierbei fließend.

Ob es sich letzendlich um Debug oder Release handelt, entscheiden hauptsächlich die Einstellungen von Compiler und Linker. (Im Grunde genommen ist die Debug-Version einfach nur zusätzlich mit - für den Endanwender - unnützem Müll zugestopft, was sich auch in der Dateigröße des Kompilats niederschlägt.)

Schönen Abend noch! :)

PS: Viele Softwarehersteller veröffentlichen ausversehen die Debug- anstelle der Release-Version. Dabei wird einem Cracker dann so ziemlich alles auf dem Silbertablett präsentiert, und man kann bei einer Analyse exakt sehen, wie ein Kopierschutz oder eine Verschlüsselung funktioniert.

So ein Reversing kann man zwar nie verhindern, aber wenn "Debug" mit "Release" verwechselt wird, sitzt man dann statt 3 Wochen nur noch 30 Minuten daran. :)


Die Debug-Funktion/Version bietet dir die Möglichkeit zum Debuggen deiner Programme durch, zum Beispiel, Breakpoints.
Die Debug-Version eines Programms ist dadurch allerdings langsamer als die Release-Version.

Allgemein gilt:
Zum entwickeln und eben Debuggen die Debug-Version ausführen
und als Endprodukt (für den Verbraucher) die Release-Version ausliefern und ausführen.

Liebe Grüße, JutenMorgen!

Einer Debug-Version werden zusätzlche Informationen für den Debugger hinzugefügt. Außerdem wird bei der Release-Version normalerweise NDEBUG definiert. Dadurch werden keine Assertions (siehe <assert.h>) mehr geprüft.