<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Debugger</id>
	<title>Debugger - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Debugger"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Debugger&amp;action=history"/>
	<updated>2026-05-19T16:56:15Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Debugger&amp;diff=11646&amp;oldid=prev</id>
		<title>imported&gt;CommonsDelinker: Ersetze First_Computer_Bug,_1945.jpg durch First_Computer_Bug,_1947.jpg (von CommonsDelinker angeordnet: File renamed: Criterion 3 (obvious error) · As expl</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Debugger&amp;diff=11646&amp;oldid=prev"/>
		<updated>2025-12-11T04:24:09Z</updated>

		<summary type="html">&lt;p&gt;Ersetze First_Computer_Bug,_1945.jpg durch &lt;a href=&quot;/index.php?title=C:File:First_Computer_Bug,_1947.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;C:File:First Computer Bug, 1947.jpg (Seite nicht vorhanden)&quot;&gt;First_Computer_Bug,_1947.jpg&lt;/a&gt; (von &lt;a href=&quot;/index.php?title=C:User:CommonsDelinker&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;C:User:CommonsDelinker (Seite nicht vorhanden)&quot;&gt;CommonsDelinker&lt;/a&gt; angeordnet: &lt;a href=&quot;/index.php?title=C:COM:FR&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;C:COM:FR (Seite nicht vorhanden)&quot;&gt;File renamed&lt;/a&gt;: &lt;a href=&quot;/index.php?title=C:COM:FR&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;C:COM:FR (Seite nicht vorhanden)&quot;&gt;Criterion 3&lt;/a&gt; (obvious error) · As expl&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Dieser Artikel|behandelt das Programm zum Auffinden von Fehlern. Zur Tätigkeit siehe [[Debuggen]].}}&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Debugger&amp;#039;&amp;#039;&amp;#039; (von engl. &amp;#039;&amp;#039;de-&amp;#039;&amp;#039; ([[Präfix]]; dt. &amp;#039;&amp;#039;ent-&amp;#039;&amp;#039;, &amp;#039;&amp;#039;aus-&amp;#039;&amp;#039;) im Sinne von &amp;#039;&amp;#039;entfernen&amp;#039;&amp;#039; und engl. &amp;#039;&amp;#039;[[Programmfehler#„Bug“ als Synonym für Programmfehler|bug]]&amp;#039;&amp;#039; im Sinne von &amp;#039;&amp;#039;Programmfehler&amp;#039;&amp;#039;) ist ein [[Werkzeug]] zum Diagnostizieren und Auffinden von Fehlern in [[Computer]]systemen, dabei vor allem in [[Computerprogramm|Programmen]], aber auch in der für die Ausführung benötigten [[Hardware]]. [[Debugging]] bezeichnet die Tätigkeit, solche Fehler zu diagnostizieren und aufzufinden, sei es unter Verwendung eines Debuggers oder anderer Methoden.&lt;br /&gt;
&lt;br /&gt;
== Namensherkunft ==&lt;br /&gt;
[[Datei:First Computer Bug, 1947.jpg|mini|hochkant=1.5|Logbuch-Seite des Mark II Aiken Relay Calculator mit dem ersten Bug (1947)]]&lt;br /&gt;
Der Begriff „debugging“ (zu deutsch &amp;#039;&amp;#039;entwanzen&amp;#039;&amp;#039;) wird häufig [[Grace Hopper]] zugeschrieben, eine Legende, die sie selber gerne erzählte, welche allerdings nicht ganz korrekt ist. 1947 hatte während der Arbeiten am [[Mark II (Computer)|Mark II]] eine Motte für den Ausfall eines Relais dieses Computers gesorgt. Das Team von Grace Hopper fand die Motte und klebte sie in das Logbuch zusammen mit dem Satz „First actual case of bug being found.“ („Das erste Mal, dass tatsächlich ein Bug gefunden wurde.“). Daraufhin soll sich die Bezeichnung „debugging“ für „Fehlersuche“ im Team eingebürgert haben. Der Begriff „Bug“ (für Insekt, Käfer, Schädling) war allerdings im Englischen unter Ingenieuren bereits seit dem 19. Jahrhundert als Bezeichnung für Fehlfunktionen in Gebrauch und wurde entsprechend bereits 1937 im Webster’s New International Dictionary als Slang erwähnt.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.k12tlc.net/content/pages/byte0909.htm |titel=BYTE.com |abruf=2019-10-14}}&amp;lt;/ref&amp;gt; Mit &amp;#039;&amp;#039;Bugfix&amp;#039;&amp;#039; (engl. &amp;#039;&amp;#039;fix&amp;#039;&amp;#039; für reparieren, ausbessern) wird die Behebung eines [[Programmfehler]]s bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Funktionen eines Debuggers ==&lt;br /&gt;
[[Datei:Winpdb-1.3.6.png|mini|hochkant=1.5|Bildschirmfoto eines Debuggers]]&lt;br /&gt;
* die &amp;#039;&amp;#039;Steuerung&amp;#039;&amp;#039; des Programmablaufs, insbesondere durch [[Haltepunkt (Programmierung)|Haltepunkte]] und die Einzelschritt-Verarbeitung von Befehlen&lt;br /&gt;
* das &amp;#039;&amp;#039;Inspizieren&amp;#039;&amp;#039; von Daten, z.&amp;amp;nbsp;B. die Register, den aktuellen Programmcode als Assembler oder Hochsprachenquelltext, den allgemeinen Daten in festen und flüchtigen Speichern, der Erzeugung von fortgeschrittenen Daten-Interpretationen etwa durch eine [[Aufrufstapel]]-Funktionalität oder das Anzeigen von Ein-/Ausgabe-Registern, Tabellen und Hochsprachen-Strukturen&lt;br /&gt;
* das &amp;#039;&amp;#039;Modifizieren&amp;#039;&amp;#039; von Speichern, z.&amp;amp;nbsp;B. des Hauptspeichers, der externen Ein-/Ausgabe-Zustände und der Register des Prozessorkerns&lt;br /&gt;
&lt;br /&gt;
Je nach Debugger und Beschaffenheit der Hardware ist es auch möglich, Rückmeldungen und Fehlerzustände ([[Exception]]s) des Zielsystems aufzufangen. Hier sind vor allem Speicherzugriffsfehler interessant, ungültige Opcodes und Befehlsfolgen, bei denen Eingangs- oder Ausgangsgrößen fraglich sind, etwa eine versuchte Division durch Null.&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet grundsätzlich zwischen Remote-Debugging von entfernten Systemen und Debugging, das innerhalb des zu untersuchenden Prozessorsystems mit Bord-Mitteln vorgenommen wird. Eine Spezialversion ist das Remote-Debugging mittels einer Simulation des Zielsystems durch eine Prozessor-Simulation und weitere Elemente. Das Debuggen einer [[Virtuelle Maschine|virtuellen Maschine]] stellt eine Zwischenform zwischen den beiden Typen dar, wobei die virtuelle Maschine prinzipiell sowohl den Charakter einer lokalen Anwendung wie auch eines eigenständigen Systems hat. Die Überwindung der Prozessor-Architektur stellt zumindest grundsätzlich einen gewissen Aufwand dar. Je nach Konzeption sind beim Debugging sogar taktgenaue Bestimmungen des Laufzeitverhaltens möglich, wobei z.&amp;amp;nbsp;B. eine Simulation dabei nicht zwangsweise in Echtzeit ablaufen muss. Bei Simulationen von Halbleitern der Kategorie [[Anwendungsspezifische integrierte Schaltung|ASIC]], [[FPGA]] oder [[Speicherprogrammierbare Steuerung|PLC]] sind sowohl Hardware- wie auch Software-Simulationen gängige Hilfsmittel, die über einen entsprechend speziellen Debugger für den Entwickler zugänglich sind.&lt;br /&gt;
&lt;br /&gt;
Einfache Fehlersuche auf Assembler-Ebene ist bei einem dafür ausgelegten System jederzeit möglich. Manche Hochsprachen, wie etwa Skripte oder diverse BASIC-Varianten, lassen sich dagegen oft nur zeilenbasiert auf Quelltextebene untersuchen. Erweiterte Funktionalitäten, z.&amp;amp;nbsp;B. das Auflösen von Symbolen, Strukturen und Funktionsnamen werden mit dem Vorhandensein von [[Debugsymbol|Symbol-Informationen]] in einer speziellen Datei oder eingebettet in einem Binärprogramm (z.&amp;amp;nbsp;B. DWARF-Debug-Information) möglich. Fortgeschrittene Debugger- und [[Integrierte Entwicklungsumgebung|Entwicklungssysteme]] können weiterhin z.&amp;amp;nbsp;B. im laufenden Betrieb Daten mitschneiden, Leistungsanalysen anfertigen und [[Nebenläufigkeit|nebenläufige]] Vorgänge visualisieren.&lt;br /&gt;
&lt;br /&gt;
Ein Debugger ist systematisch am ehesten vergleichbar mit dem, was in der Elektrotechnik und Elektronik durch die typischen Messgeräte und Hilfsmittel, z.&amp;amp;nbsp;B. einen Logik-Tester, ein Multimeter, ein [[Oszilloskop]] oder einen [[Signalgenerator]], an Möglichkeiten für die Inbetriebnahme und Überwachung von entsprechenden Systemen zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
Moderne Debugger haben die Möglichkeit, Änderungen am [[Quelltext]] während der Programmausführung direkt zu übersetzen und anschließend das Programm fortzusetzen. Diese Technik wird auch als &amp;#039;&amp;#039;just in time debugging&amp;#039;&amp;#039; bezeichnet. Ein &amp;#039;&amp;#039;Debugger&amp;#039;&amp;#039; ist oft Bestandteil einer [[Programm-Entwicklungsumgebung]].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kann ein Debugger beim [[Reverse Engineering]] auch dazu eingesetzt werden, um mit der [[Ablaufverfolgung]] und dem Untersuchen von Variablen Fremdprogramme besser und schneller zu verstehen.&lt;br /&gt;
&lt;br /&gt;
In objektorientierten [[Laufzeitsystem]]en, bei der [[Parallele Programmierung|parallelen Programmierung]] oder in [[Verteilte Systeme|verteilten Systemen]] ist es sehr schwierig oder in der Praxis sogar unmöglich, eine genaue Programmabfolge zu definieren. Einige Entwicklungssysteme verzichten daher auf den Einsatz von [[Laufzeit (Informatik)|Laufzeit]]-Debuggern, lassen aber in der Regel die Definition von Haltepunkten zu, an dem der Zustand aller Variablen nach dem Programmstopp analysiert werden kann. Auch bei der [[Ausnahmebehandlung]], also nach Programmunterbrechungen, die zum Beispiel durch einen Fehler erzwungen werden, werden sogenannte [[Post mortem|Post-Mortem]]-Debugger in diesem Sinne eingesetzt.&lt;br /&gt;
&lt;br /&gt;
== Haltepunkte ==&lt;br /&gt;
Die wichtigste Fähigkeit eines Debuggers besteht darin, [[Haltepunkt (Programmierung)|Haltepunkte]] zu setzen. Diese ermöglichen es, an beliebiger Stelle eines Programms dessen Ausführung zu unterbrechen und so die Untersuchung der Register und des Speichers zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten werden Software-Haltepunkte genutzt, welche ein Byte im zu untersuchenden Programm temporär verändern. Dieses Byte ist die Anweisung, einen [[Breakpoint Interrupt]] auszulösen, die Programmausführung beim veränderten Byte anzuhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit beinhaltet allerdings die Einschränkung, dass das zu untersuchende Programm sich selbst nicht auf [[Integrität (Informationssicherheit)|Integrität]] prüfen darf (zum Beispiel durch Überprüfung einer [[Prüfsumme]], siehe dazu auch [[Zyklische Redundanzprüfung]]). Diese Schwäche der weichen Haltepunkte nutzen [[Malware]]programmierer zum Beispiel aus, um die [[Analyse]] eines Schadprogramms zu erschweren oder sogar zu verhindern.&lt;br /&gt;
&lt;br /&gt;
Dieser Einschränkung unterliegen die Hardware-Haltepunkte nicht, da diese das zu untersuchende Programm nicht verändern. Hardware-Haltepunkte sind direkt im Prozessor realisiert; allerdings besitzt dieser nur begrenzte Ressourcen dafür, so dass nur eine begrenzte Anzahl dieser Haltepunkte zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
Viele Debugger erlauben es dem Programmierer, bedingte Haltepunkte zu setzen. Dabei gibt der Programmierer neben der Anweisung, wo die Programmausführung angehalten werden soll, den Befehl für einen [[Boolescher Operator|booleschen Ausdruck]] an. Der Debugger unterbricht die Programmausführung nur dann, wenn die angegebene Codezeile erreicht wurde und gleichzeitig der boolesche Ausdruck wahr ist.&lt;br /&gt;
&lt;br /&gt;
Damit der Debugger testen kann, ob der boolesche Ausdruck wahr ist, muss dieser allerdings die Programmausführung temporär unterbrechen und den booleschen Ausdruck überprüfen, worauf der Debugger dann entweder die Programmausführung fortsetzt oder das Programm im unterbrochenen Zustand lässt.&lt;br /&gt;
&lt;br /&gt;
== Zur Fehlersuche verwendete Werkzeuge ==&lt;br /&gt;
=== Software ===&lt;br /&gt;
&amp;lt;!-- Alphabetisch: --&amp;gt;&lt;br /&gt;
* Compuware [[Xpediter]] – [[z/OS]]-Debugger&lt;br /&gt;
* DDT (für &amp;#039;&amp;#039;{{lang|en|Dynamic Debugging Tool}}&amp;#039;&amp;#039;) – [[Digital Equipment Corporation|DEC]]/[[CP/M]]-Debugger&lt;br /&gt;
* [[DEBUG]] – [[MS-DOS]]-Debugger&lt;br /&gt;
* [[GNU Debugger|gdb]] – der [[GNU]]-Debugger, ein [[Unixoides System|Unix]]-Werkzeug&lt;br /&gt;
* HiTOP – Debugger/[[Integrierte Entwicklungsumgebung|IDE]] von Hitex Development Tools&lt;br /&gt;
* [[IBM Debug Tool]] – [[z/OS]]-Debugger mit IDE&lt;br /&gt;
* [[Interactive Disassembler]] (IDA) – [[Disassembler]] für viele Rechner-Architekturen; enthält u&amp;amp;nbsp;a. Debugger für die [[Arm-Architektur|Arm-]], [[MIPS-Architektur|MIPS]]-, [[m68k]]- und [[x86-Architektur|x86-]]/[[x64]]-Architektur&lt;br /&gt;
* iSYSTEM BlueBox mit winIDEA – In circuit debugger für [[Eingebettetes System|Embedded Systeme]]&lt;br /&gt;
* Lauterbach TRACE32 – In circuit debugger für Embedded Systeme&lt;br /&gt;
* [[ltrace]] – zeigt dynamische Bibliotheks- und Systemaufrufe in [[Linux]] an&lt;br /&gt;
* [[Microsoft Visual Studio]] (Entwicklungsumgebung) – integrierter Debugger + Remote Debugger&lt;br /&gt;
* [[OllyDbg]] – Debugger mit [[Grafische Benutzeroberfläche|grafischer Oberfläche]] (GUI) für [[Microsoft Windows|Windows]]-Betriebssysteme&lt;br /&gt;
* PLS Universal Debug Engine UDE - Multicore Debugger und Trace-Tool für eingebettete Systeme&lt;br /&gt;
* ROMWack – Bestandteil des ROMs im [[Amiga]]&lt;br /&gt;
* SEGGER Ozone – Debugger für Embedded Systeme&lt;br /&gt;
* [[Symbolic Instruction Debugger|SID]] – Debugger von [[Digital Research]], u.&amp;amp;nbsp;a. enthalten in [[CP/M]] (Ersatz für DDT) und [[DR-DOS|DR&amp;amp;nbsp;DOS]] (bis Version 6)&lt;br /&gt;
* [[SoftICE]] – Kernel-Modus-Debugger für [[PC-kompatibles DOS|DOS]] und Windows bis zu [[Microsoft Windows XP|Windows&amp;amp;nbsp;XP]] (1987–2000&amp;lt;!-- (Letzte Veröffentlichung)--&amp;gt;)&lt;br /&gt;
* [[strace]] (Linux), truss ([[Solaris (Betriebssystem)|Solaris]]), [[DTrace]] ([[macOS]]) – zeigt Systemaufrufe an&lt;br /&gt;
* TOD – ein sog. Omniscient Debugger für Java&lt;br /&gt;
* [[Turbo Debugger]] von [[Borland]]&lt;br /&gt;
* [[valgrind]] – zum Debuggen und Profilen von Linux-Programmen verschiedener Architekturen&lt;br /&gt;
* Visual DuxDebugger — Debugger Disassembler für Windows 64-bit&lt;br /&gt;
* [[WinDbg]], KD/CDB, NTSD — Windows-Debugger für x86-, Itanium, und x64-Systeme, Bestandteil der &amp;#039;&amp;#039;Debugging Tools for Windows&amp;#039;&amp;#039;&lt;br /&gt;
* [[W32DASM]] – Debugger und Disassembler&lt;br /&gt;
* [[x64dbg]] - Debugger mit GUI für Windows-Betriebssysteme&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* [[JTAG]]&lt;br /&gt;
* [[Logikanalysator]]&lt;br /&gt;
* [[In-Circuit-Emulator]] (ICE)&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Softwaretest]]&lt;br /&gt;
* [[Delta Debugging]]&lt;br /&gt;
* [[Disassembler]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* David J. Agans: &amp;#039;&amp;#039;Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems&amp;#039;&amp;#039;, AMACOM, 2002, ISBN 0-8144-7168-4.&lt;br /&gt;
* Ann R. Ford, Toby J. Teorey: &amp;#039;&amp;#039;Practical Debugging in C++&amp;#039;&amp;#039;, Prentice Hall, 2002, ISBN 0-13-065394-2.&lt;br /&gt;
* Matthew A. Telles, Yuan Hsieh, Matt Telles: &amp;#039;&amp;#039;The Science of Debugging&amp;#039;&amp;#039;, The Coriolis Group, 2001, ISBN 1-57610-917-8.&lt;br /&gt;
* [[Andreas Zeller (Informatiker)|Andreas Zeller]]: &amp;#039;&amp;#039;Why Programs Fail: A Guide to Systematic Debugging&amp;#039;&amp;#039;, Dpunkt Verlag, 2005, ISBN 3-89864-279-8.&lt;br /&gt;
* Thorsten Grötker, Ulrich Holtmann, Holger Keding, Markus Wloka: &amp;#039;&amp;#039;The Developer&amp;#039;s Guide to Debugging&amp;#039;&amp;#039;, 2. Ausgabe, CreateSpace Independent Publ., 2012, ISBN 978-1-4701-8552-7.&lt;br /&gt;
* John Robbis: &amp;#039;&amp;#039;Microsoft .NET 2.0 Anwendungen debuggen, Praktische (...) mit Visual Studio 2005&amp;#039;&amp;#039;, deutsch, MicrosoftPress Deutschland, 2007, ISBN 978-3-86645-408-8&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wiktionary}}&lt;br /&gt;
* [http://www.whyprogramsfail.com/ Why Programs Fail] – Webseite zum Buch &amp;#039;&amp;#039;Why Programs Fail&amp;#039;&amp;#039; von A. Zeller, mit Programmbeispielen und Lehrmaterial (600 Folien!)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;CommonsDelinker</name></author>
	</entry>
</feed>