Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Debugsymbol

Als Debugsymbole werden in der Informatik Informationen bezeichnet, die zum Debuggen von ausführbaren Dateien erstellt werden können.

Inhalt5 Abschnitte
  1. 1. Definition und Bedeutung
  2. 2. Problem beim Kompilieren
  3. 3. Funktionsweise der Debugsymbole
  4. 4. Nachteile
  5. 5. Bereitstellung in kommerzieller Software

Definition und Bedeutung

Debugsymbole sind zusätzliche Informationen für das Debuggen ausführbarer Dateien. Sie stammen vor allem aus dem Quelltext und bewahren Bezeichner wie Variablennamen sowie Namen von Prozeduren und Funktionen. Dadurch helfen sie, Fehler im kompilierten Programm auf der Ebene der ursprünglichen Programmiersprache zu untersuchen.

Problem beim Kompilieren

Beim Übersetzen von Quelltext in Maschinencode oder Bytecode gehen Bezeichner und teilweise auch die ursprüngliche Programmstruktur verloren. Bezeichner werden für die Ausführung nicht benötigt und würden zusätzlichen Speicher belegen. Optimierungen können die Struktur außerdem stark verändern: Beim „loop unrolling“ werden Schleifen umgeformt, um beispielsweise bedingte Sprünge zu vermeiden und die Befehlspipeline moderner Prozessoren zu nutzen. Bei der Vektorisierung werden wiederholte gleichartige Operationen auf einem Array durch andere Konstrukte ersetzt, um SIMD-Fähigkeiten zu verwenden.

Ohne zusätzliche Informationen beschränkt sich das Debuggen ausführbarer Dateien und Dynamic-Link Libraries (DLLs) auf Maschinencode-Ebene im Wesentlichen auf Assemblerbefehle sowie den aktuellen Verarbeitungsstand, etwa Maschinenregister, Programmzähler und tabellarisch dargestellte Speicherbereiche. Dadurch ist der Programmablauf bei einem Fehler oft schwer nachzuvollziehen; außerdem sind besondere Kenntnisse der Rechnerarchitektur und Assemblersprache erforderlich.

Funktionsweise der Debugsymbole

Der Entwickler kann den Compiler anweisen, beim Übersetzen zusätzliche Symbolinformationen in das Programm einzubinden. Der Begriff „Symbol“ bedeutet hier Bezeichner. Meist verzichtet der Compiler dann auf umfangreichere Optimierungen. Ein symbolischer Debugger kann damit das Programmgeschehen auf Quellsprachenebene verfolgen.

Zu den Debuginformationen gehört insbesondere die Symboltabelle. Sie enthält und verwaltet Angaben über definierte oder referenzierte Funktionen und globale Variablen und ordnet deren symbolische Namen den jeweiligen Maschinenadressen zu. Der Debugger kann zudem Ausdrücke der Quellsprache auswerten, indem beispielsweise Quellcode mit dem zugehörigen, von der Rechnerarchitektur abhängigen Assemblercode abgeglichen wird.

Nachteile

Da die Informationen häufig bereits beim Übersetzen in den Maschinencode eingebunden werden, werden die ausführbaren Dateien erheblich größer. Für die endgültige Programmversion entfernt man die Debugsymbole deshalb meist wieder oder speichert sie in einer separaten Datei.

Symboltabellen erleichtern nach einer Dekompilierung außerdem die Gewinnung eines deutlich verständlicheren Quelltexts. Das ist besonders für Unternehmen problematisch, deren Quelltext ein Firmengeheimnis bleiben soll; als Gegenmaßnahme wird Obfuskation genannt. Weil der Compiler bei Debugversionen im Allgemeinen die meisten Optimierungen unterlässt, kann zudem die Ausführungsgeschwindigkeit deutlich sinken.

Bereitstellung in kommerzieller Software

Einige Unternehmen stellen Debugsymbole für ihre Programme getrennt bereit, damit Fehler untersucht werden können. Diese Dateien lassen sich separat herunterladen. Beispielsweise kann Microsofts Debugger WinDbg Debugsymbole für Windows-DLLs automatisch herunterladen, wenn der Quellcode nicht verfügbar ist.

Weiterlesen

Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … Debugger Funktionen eines Debuggers · die Steuerung des Programmablaufs, insbesondere durch Haltepunkte und die Einzelschritt-Verarbeitung von Befehlen · das Inspizieren … Quelltext Quelltext, auch Quellcode (englisch source code) oder unscharf Programmcode genannt, ist in der Informatik der für Menschen lesbare, in einer … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Bytecode Bytecode ist in der Informatik die Bezeichnung für eine Sammlung von Befehlen, also die Maschinensprache für eine virtuelle Maschine. Pipeline (Prozessor) Die Pipeline (auch Befehls-Pipeline oder Prozessor-Pipeline) bezeichnet bei Mikroprozessoren eine Art „Fließband“, mit dem die Abarbeitung der … Parallele Programmierung Es umfasst zum einen Methoden, ein Computerprogramm in einzelne Teilstücke aufzuteilen, die nebenläufig ausgeführt werden können, zum anderen Methoden, … Black Box (Systemtheorie) Man beschränkt sich bei der Untersuchung und Beschreibung auf die Messung der Input-Output-Beziehungen (EVA-Prinzip). Schema einer Black Box. Das Gegenteil … Assemblersprache Eine Assemblersprache, kurz auch Assembler genannt (von englisch to assemble ‚zusammenfügen'), ist eine Programmiersprache, die auf den Befehlsvorrat eines … Maschinensprache Mit einem Assembler: Assemblersprachen formulieren die Prozessorbefehle des Maschinencodes als Mnemonics in einer einfachen Syntax. Dieser Quelltext wird … Rechnerarchitektur Zu den bekanntesten Architekturen für Computer bzw. deren zentralen Recheneinheiten, oder Prozessoren, zählen die Harvard-Architektur und die Von-Neumann- … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es …