Programme debuggen

Programmieren ist eine komplexe Angelegenheit. Nur die wenigsten schaffen es mehr als 10 Zeilen fehlerfrei zu schreiben. Erst recht nicht als Anfänger. Häufig meiste Zeit bei Programmentwicklung für Fehlersuche (=debuggen) und Korrektur.

Hilfreich Fehler zu klassifizieren:


The First "Computer Bug"

Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard University, 9 September 1945. The operators affixed the moth to the computer log, with the entry: "First actual case of bug being found". They put out the word that they had "debugged" the machine, thus introducing the term "debugging a computer program". In 1988, the log, with the moth still taped by the entry, was in the Naval Surface Warfare Center Computer Museum at Dahlgren, Virginia.


Image bug


Apple goto-fail bug

Aktuelles (2014) Beispiel für sicherheitsrelevanten Bug in Apple IOS 7 (C-Programmcode).


// ...
hashOut.data = hashes + SSL_MD5_DIGEST_LEN;
hashOut.length = SSL_SHA1_DIGEST_LEN;
if ((err = SSLFreeBuffer(&hashCtx)) != 0)
    goto fail;
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail; 
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

err = sslRawVerify(...);
//...

Entscheidender Check ( sslRawVerify()) wird u.U. nicht ausgeführt, ermöglicht Angriffe auf verschlüsselte (TLS/SSL) Verbindungen.


Meiste Zeit bei Programmentwicklung i.d.R. für (Laufzeit-/Semantik-) Fehlersuche.
Standardverfahren sind printf, cout statements an den kritischen Stellen
\bgroup\color{green}$\Rightarrow$\egroup umständlich, zeitraubend

Viel eleganter mit debugger


Image dddwin
Oder gleich mit integrierter Entwicklungsumgebung (IDE): Eclipse
Gibt es für C++, JAVA, Python, u.a., unter Linux, Windows, MacOS, ...

Image EclipseScrShot


Eclipse am CIP

Auch andere IDEs: kdevelop auf Linux, VisualStudio auf Windows, ...

IDEs gedacht für größere Entwicklungsprojekte, daher meist etwas sperrig in der Handhabung:
erfordert Projektdefinition, Konfiguration Build-System