Sprachen
»de« en 
Benutzerkonto
Benutzername

Passwort


Debugcode entfernen

Compiler Debugcode

Der Compiler dient dazu, Programme aus einer höheren Programmiersprache in ausführbaren Code umzuwandeln. Normalerweise lässt dieser Code kaum noch rückschlüsse auf den Quellcode zu.

Um mit einem Debugger Probleme und Fehler im Code zu finden, kann der Compiler angewiesen werden, zusätzlich zum Maschinencode auch noch angaben zum verwendeten Quelltext in die Programme und Libraries einzufügen. (Beim GNU-Compiler dient dazu die Option -g). Damit lässt sich zur Laufzeit oder nach dem Absturz des Programmes z.B. feststellen, auf welcher Quellcodezeile man sich befindet und welchen Wert bestimmte Variablen annehmen.

Dieser Debugcode vergrössert die Programme und somit auch deren Ladezeit. Da der Debugcode nur für Programmierer interessant ist, sollte er auf reinen Anwendersystemen entfernt werden, um die Programmausführung zu beschleunigen.

Entfernung des Debugcodes

Der Debugcode kann entweder beim Compilieren weggelassen werden, indem die Option -g weggelassen wird, oder nachträglich mit dem Befehl strip entfernt werden. Um zum Beispiel das Programm lyx vom Debugcode zu befreien dient folgender Befehl:

strip /usr/local/bin/lyx

Selbstverständlich lassen sich auch Shared Object Libraries strippen. Ein Beispiel:

strip /usr/lib/qt/lib/libqt.so.2.2.1

Vorsicht! Programme und Libraries, die in Gebrauch sind, dürfen nicht gestripped werden, da es sonst unweigerlich zu Abstürzen oder Fehlfunktionen kommt. Es darf aber eine Kopie gestripped werden, und diese darf nacher mit mv über das Original geschoben werden. Ein Beispiel, wie die libc aus dem laufenden System gestripped werden kann:

cp /lib/libc-2.1.3.so /tmp/libc-2.1.3.so.strip
strip /tmp/libc-2.1.3.so.strip
mv /tmp/libc-2.1.3.so.strip /lib/libc-2.1.3.so

Hier ist darauf zu achten, dass auch wirklich die Library, und nicht nur ein symbolischer Link darauf kopiert wird.

Durch den strip-Befehl wird die Programmlogik nicht verändert. Es werden nicht weniger Programminstruktionen ausgeführt. Der Gewinn liegt einzig in der geringeren Ladezeit und der kleineren Füllung des Diskcaches.

Vom Programmierer eingefügter Debug-Code

Manche Programmierer fügen in Programme Befehle ein, die nur dazu dienen, die Funktionstüchtigkeit des Programmes zu überprüfen. Im allgemeinen ist das eine einfache Textausgabe, welche angibt, was das Programm soeben erledigt hat oder welchen Wert eine bestimmte Variable annimmt. Ein Beispiel:

... Anfang des Programms
printf(stderr,"debug: bin in blafasel(). i hat den Wert %d",i);
... Rest des Programms

Diese Zeile müsste nun von Hand aus dem Quellcode entfernt werden. Die meisten Programmierer verwenden aber eine intelligentere Lösung, z.B.:

... Anfang des Programms
#ifdef DEBUG
 printf(stderr,"debug: bin in blafasel(). i hat den Wert %d",i);
#endif
... Rest des Programms

Hier werden die Debugzeilen nur verwendet, wenn der Compiler mit der Option -DDEBUG aufgerufen wird. So kann der Programmierer oder Tester sein Programm mit Debugcode benutzen, während für Anwender mit wenigen Handgriffen ein schnelleres Programm ohne Debug-Code erzeugt werden kann. Programme, die mit Autoconf aus den Quellen kompiliert und installiert werden bieten im Allgemeinen eine Option für ./configure, welche die Compileroption für den Debuggcode automatisch setzt. Zum Beispiel

./configure --enable-debug=no

Normalerweise beeinflusst das sowohl die von Hand eingefügten Debug-Zeilen als auch die Compileroption für Debugcode.
Ein ./configure --help gibt Auskunft über mögliche Optionen.

Manchmal gibt es auch im Makefile eine Option, um die Binaries gleich bei der Installation zu strippen. Zum Beispiel "make install-strip".


© 2000 - 2007 by Stefan Heimers
Kürzlich geändert
Dieser Server (de)
2024-05-04 18:16:25
Bedingte Anweisungen (de)
2023-12-21 12:43:54
Defragmentieren (de)
2023-12-21 12:43:54
Vorverstärker (de)
2023-12-21 12:43:54
Sunday Webserver (de)
2023-12-21 12:43:54
Linker (de)
2023-12-21 12:43:54