Debuggen

Im Computerprogrammierung und Software-Entwicklung, Debuggen ist der Prozess des Findens und Lösens Käfer (Defekte oder Probleme, die den korrekten Betrieb verhindern) innerhalb Computerprogramme, Software, oder Systeme.

Debugging -Taktik kann beinhalten interaktiv Debugging, Steuerfluss Analyse, Unit -Tests, Integrationstests, Analyse der Protokolldatei, Überwachung am Anwendung oder System eben, Speichermülldeponien, und Profilerstellung. Viele Programmiersprachen und Softwareentwicklungstools bieten auch Programme zur Unterstützung des Debuggens, bekannt als Debugger.

Etymologie

Ein Computerprotokolleintrag aus der Mark II, wobei eine Motte auf die Seite geklebt ist

Die Begriffe "Fehler" und "Debugging" werden im Volksmund zugeschrieben Admiral Grace Hopper In den 1940er Jahren.[1] Während sie an einem arbeitete Markus II Der Computer an der Harvard University entdeckte ihre Mitarbeiter eine Motte in einer Staffel und behinderte dadurch den Betrieb, woraufhin sie bemerkte, dass sie das System "debuggen". Der Begriff "Fehler" im Sinne von "technischem Fehler" stammt jedoch mindestens 1878 und Thomas Edison (sehen Softwarefehler für eine vollständige Diskussion). In ähnlicher Weise scheint der Begriff "Debugging" als Begriff in der Luftfahrt vor dem Eintritt in die Welt der Computer verwendet worden zu sein. In einem Interview bemerkte Grace Hopper in der Tat, dass sie den Begriff nicht prägte. Die Motte passte zur bereits vorhandenen Terminologie und wurde also gespeichert. Ein Brief von J. Robert Oppenheimer (Direktor der Atombombe des Zweiten Weltkriegs Manhattan -Projekt in Los Alamos, New Mexico) verwendete den Begriff in einem Brief an Dr. Ernest Lawrence an der UC Berkeley vom 27. Oktober 1944,[2] In Bezug auf die Einstellung zusätzlicher technischer Mitarbeiter.

Das Oxford Englisch Wörterbuch Eintrag für "Debug" zitiert den Begriff "Debugging", der in Bezug auf Flugzeugmotor -Tests in einem Artikel von 1945 im Journal der Royal Aeronautical Society verwendet wird. Ein Artikel in "Airforce" (Juni 1945 S. 50) bezieht sich ebenfalls auf Debugging, diesmal der Flugzeugkameras. Hopper Insekt wurde am 9. September 1947 gefunden. Computerprogrammierer haben den Begriff erst in den frühen 1950er Jahren übernommen. Der wegweisende Artikel von Gill[3] 1951 ist die früheste detaillierte Diskussion über Programmierfehler, aber es verwendet nicht den Begriff "Fehler" oder "Debugging". In dem ACMDie digitale Bibliothek, der Begriff "Debugging", wird erstmals in drei Papieren von 1952 ACM -Treffen verwendet.[4][5][6] Zwei der drei verwenden den Begriff in Anführungszeichen. Bis 1963 war "Debugging" ein gewöhnlicher Begriff, der im Vorbeigehen ohne Erklärung auf Seite 1 des CTSS Handbuch.[7]

Peggy A. Kidwell's Artikel Stalkieren des schwer fassbaren Computerbuges[8] Erörtert die Etymologie von "Bug" und "Debugg" genauer.

Zielfernrohr

Da Software und elektronische Systeme im Allgemeinen komplexer geworden sind, haben sich die verschiedenen gemeinsamen Debugging -Techniken um mehr Methoden zur Erkennung von Anomalien, Bewertung der Auswirkungen und Zeitplan erweitert Software -Patches oder vollständige Aktualisierungen eines Systems. Die Wörter "Anomalie" und "Diskrepanz" können als Sein verwendet werden neutrale Begriffe, um die Wörter "Fehler" und "Defekt" oder "Fehler" zu vermeiden, in denen es möglicherweise eine Implikation gibt, die alle sogenannte Fehler, Mängel oder Käfer muss festgelegt werden (um jeden Preis). Stattdessen an Folgenabschätzung kann vorgenommen werden, um festzustellen, ob Änderungen zum Entfernen einer Anomalie (oder Diskrepanz) wäre für das System kostengünstig, oder eine geplante neue Version könnte die Änderungen (en) unnötig machen. Nicht alle Probleme sind Sicherheitskritisch oder Missionskritisch in einem System. Es ist auch wichtig, die Situation zu vermeiden, in der eine Veränderung für die Benutzer langfristig stärker störend sein könnte, als mit den bekannten Problemen zu leben (wobei die "Heilung schlechter wäre als die Krankheit"). Das Basis von Entscheidungen über die Akzeptanz einiger Anomalien kann eine Kultur eines "Zero-Defects" -Mandats vermeiden, bei dem Menschen versucht sein könnten, die Existenz von Problemen zu leugnen, damit das Ergebnis als Null erscheinen würde Mängel. In Anbetracht der Kollateralprobleme wie der COST-UNTERSUS-NEHFITFIT-Bewertung werden breitere Debugging-Techniken erweitert, um die Häufigkeit von Anomalien (wie oft die gleichen "Fehler auftreten) zu bestimmen, um ihre Auswirkungen auf das Gesamtsystem zu bewerten.

Werkzeug

Das Debuggen auf Videospielkonsolen erfolgt normalerweise mit speziellen Hardware wie dieser Xbox Debug -Einheit für Entwickler bestimmt.

Debugging -Bereiche in der Komplexität von einfachen Fehlern zur Durchführung langwieriger und lästiger Aufgaben der Datenerfassung, -analyse und der Planung von Updates. Die Debugging -Fähigkeit des Programmierers kann ein wesentlicher Faktor für die Fähigkeit sein, ein Problem zu debuggen, aber die Schwierigkeit des Software -Debuggen Programmiersprache(s) verwendete und die verfügbaren Werkzeuge, wie z. Debugger. Debugger sind Softwaretools, die das ermöglichen Programmierer um die zu überwachen Hinrichtung Stoppen Sie es eines Programms, starten Sie es neu, setzen Sie Haltepunkteund ändern Werte im Speicher. Der Begriff Debugger kann auch auf die Person beziehen, die das Debuggen tut.

Allgemein, hochrangige Programmiersprachen, wie zum Beispiel Javaerleichtern das Debuggen, weil sie Funktionen wie z. Ausnahmebehandlung und Geben Sie die Überprüfung ein Das macht echte Quellen für unberechenbares Verhalten leichter zu erkennen. In Programmiersprachen wie z. C oder Montage, Fehler können stille Probleme verursachen, z. Speicherbeschäftigung, und es ist oft schwierig zu erkennen, wo das anfängliche Problem aufgetreten ist. In diesen Fällen, Speicherdebugger Tools können benötigt werden.

In bestimmten Situationen können Allzweck -Software -Tools, die sprachspezifischer Natur sind, sehr nützlich sein. Diese haben die Form von statische Tools für Codeanalyse. Diese Tools suchen nach einem sehr spezifischen Satz bekannter Probleme, von denen einige häufig und einige selten im Quellcode sind, und konzentrieren sich eher auf die Semantik (z. B. Datenfluss) als auf die Syntax, wie Compiler und Dolmetscher.

Für verschiedene Sprachen gibt es sowohl kommerzielle als auch kostenlose Tools. Einige behaupten, Hunderte verschiedener Probleme zu erkennen. Diese Tools können äußerst nützlich sein, wenn Sie sehr große Quellbäume überprüfen, wo es unpraktisch ist, Code-Durchgangs-Durchläufe durchzuführen. Ein typisches Beispiel für ein erkanntes Problem wäre eine Variable Dereferenz, die auftritt Vor Den Variablen wird ein Wert zugewiesen. Als ein weiteres Beispiel führen einige solche Tools eine starke Typüberprüfung durch, wenn die Sprache dies nicht erfordert. Daher sind sie besser darin, wahrscheinliche Fehler in Code zu finden, die syntaktisch korrekt sind. Diese Tools haben jedoch den Ruf falscher Positives, bei denen der korrekte Code als zweifelhaft gekennzeichnet ist. Die alte Unix Fussel Programm ist ein frühes Beispiel.

Zum Debuggen der elektronischen Hardware (z. B.,,, Computerhardware) sowie Software mit niedriger Ebene (z. B.,, Biose, Gerätetreiber) und Firmware, Instrumente wie z. Oszilloskope, Logikanalysatoren, oder In-Circuit-Emulatoren (Ices) werden oft allein oder in Kombination verwendet. Ein Eis kann viele der typischen Aufgaben des Software-Debuggers auf niedriger Ebene ausführen Software und Firmware.

Debugging -Prozess

Normalerweise besteht der erste Schritt beim Debuggen darin, zu versuchen, das Problem zu reproduzieren. Dies kann eine nicht triviale Aufgabe sein, zum Beispiel wie mit Parallele Prozesse und einige Heisenbugs. Außerdem kann die spezifische Benutzerumgebung und der Nutzungsverlauf schwierig sein, das Problem zu reproduzieren.

Nachdem der Fehler reproduziert wurde, muss die Eingabe des Programms möglicherweise vereinfacht werden, um das Debuggen zu erleichtern. Zum Beispiel kann ein Fehler in einem Compiler es schaffen Absturz beim Parsen einer großen Quelldatei. Nach der Vereinfachung des Testfalls können jedoch nur wenige Zeilen aus der ursprünglichen Quelldatei ausreichen, um denselben Absturz zu reproduzieren. Eine solche Vereinfachung kann manuell mit a Divide-and-Conquer sich nähern. Der Programmierer versucht, einige Teile des Original -Testfalls zu entfernen und zu überprüfen, ob das Problem noch vorhanden ist. Beim Debuggen des Problems in a GUIDer Programmierer kann versuchen, eine Benutzerinteraktion aus der ursprünglichen Problembeschreibung zu überspringen und zu überprüfen, ob die verbleibenden Aktionen ausreichen, damit Fehler angezeigt werden.

Nachdem der Testfall ausreichend vereinfacht ist, kann ein Programmierer ein Debugger -Tool verwenden, um Programmzustände (Werte von Variablen) und die Rufen Sie Stack an) und verfolgen Sie den Ursprung des Problems (en). Alternative, Verfolgung kann verwendet werden. In einfachen Fällen besteht die Verfolgung nur einige Druckanweisungen, die die Werte von Variablen an bestimmten Punkten der Programmausführung ausgeben.

Techniken

  • Interaktives Debuggen Verwendet Debugger -Tools, mit denen die Codeausführung einer Anwendung einen Schritt gleichzeitig verarbeitet und in der Pause in der Anwendungsstatus inspiziert oder geändert werden kann. Diese Tools unterstützen üblicherweise Watchpoints, bei denen die Ausführung fortgesetzt werden kann, bis sich eine bestimmte Variable ändert, und sich auf Fangpunkte zu erfassen, die dazu führen, dass der Debugger für bestimmte Arten von Programmereignissen, wie z. B. Ausnahmen oder das Laden einer gemeinsamen Bibliothek, anhält.
  • Druckdebugging oder Verfolgung Ist das Ansehen (live oder aufgezeichnet) Trace -Anweisungen oder Druckanweisungen, die den Ausführungfluss eines Prozesses und den Datenfortschritt anzeigen. Die Verfolgung kann mit speziellen Tools (wie bei der Trace von GDB) oder durch Einfügen von Trace -Anweisungen in den Quellcode erfolgen. Letzteres wird manchmal genannt Printf -Debugging, aufgrund der Verwendung der printf Funktion in C. Diese Art des Debuggens wurde durch den Befehlst tron ​​in den Originalversionen des Anfängers eingeschaltet BASIC Programmiersprache. Tron stand für "Trace on." Tron ließ die Zeilennummern jeder Basisbefehlslinie gedruckt, während das Programm lief.
  • Ferndebugging ist der Prozess des Debugges eines Programms, das auf einem System unterscheidet als der Debugger. Um das Remote -Debugging zu starten, stellt ein Debugger eine Verbindung zu einem Remote -System über einen Kommunikations -Link wie ein lokales Netzwerk her. Der Debugger kann dann die Ausführung des Programms auf dem Remote -System steuern und Informationen über seinen Zustand abrufen.
  • Post-Mortem-Debugging Debugging des Programms, nachdem es bereits getan hat abgestürzt. Verwandte Techniken umfassen häufig verschiedene Tracing -Techniken wie Untersuchung von Protokolldateien, Ausgabe a Rufen Sie Stack an beim Absturz,[9] und Analyse von Memory Dump (oder Core-Dump) des Absturzprozesses. Der Dump des Prozesses kann automatisch vom System (z. B. wenn der Prozess aufgrund einer unberechtigten Ausnahme beendet wurde) oder durch einen von Programmierer inervertierten Befehl oder manuell vom interaktiven Benutzer erhalten werden.
  • "Wolf Zaun" Algorithmus: Edward Gauß beschrieb diesen einfachen, aber sehr nützlichen und jetzt berühmten Algorithmus in einem Artikel von 1982 für 1982 Kommunikation der ACM wie folgt: "Es gibt einen Wolf in Alaska; Wie finden Sie ihn? Bauen Sie zuerst einen Zaun in der Mitte des Staates, warten Sie auf das Heulen des Wolfs, bestimmen Sie, auf welcher Seite des Zauns er sich befindet. Wiederholen Bis Sie an den Punkt kommen, an dem Sie den Wolf sehen können. "[10] Dies wird implementiert, z. in dem Git Versionskontrollsystem als Befehl Git halb, der den obigen Algorithmus verwendet, um zu bestimmen, welches verpflichten stellte einen bestimmten Fehler ein.
  • Debugging aufzeichnen und wiederholen ist die Technik, um eine Programmausführungsaufzeichnung zu erstellen (z. B. mit Mozillas kostenlos rr Debugging -Tool; Aktivierung reversibler Debugging/Ausführung), die wiederholt und interaktiv debuggen werden kann. Nützlich für das Fern-Debuggen und Debuggen intermittierender, nicht determinstischer und anderer schwer zu reproduzierter Defekte.
  • Zeitreise -Debugging ist der Prozess des Rücktritts in die Zeit durch den Quellcode (z. B. Verwendung Liverecorder rückgängig machen) zu verstehen, was während der Ausführung eines Computerprogramms passiert; Benutzer können mit dem Programm interagieren; Um die Geschichte zu ändern, falls dies gewünscht wurde, und zu beobachten, wie das Programm reagiert.
  • Delta -Debugging- Eine Technik zur Automatisierung der Testfallvereinfachung.[11]: S.123
  • Saffel- Eine Technik des Isolierens des Versagens innerhalb des Tests unter Verwendung einer progressiven Einbeziehung von Teilen des fehlenden Tests.[12][13]
  • Kausalitätsverfolgung: Es gibt Techniken, um die Ursache -Effektketten in der Berechnung zu verfolgen.[14] Diese Techniken können auf bestimmte Fehler wie Nullzeiger Dereferenzen zugeschnitten werden.[15][16]

Debugging für eingebettete Systeme

Im Gegensatz zur Umgebung für die Design -Software -Design von Generalzwecken ist ein Hauptmerkmal der eingebetteten Umgebungen die Anzahl verschiedener Plattformen, die den Entwicklern (CPU -Architekturen, Anbieter, Betriebssysteme und deren Varianten) zur Verfügung stehen. Eingebettete Systeme sind per Definition nicht allgemeine Konstruktionen: Sie werden in der Regel für eine einzelne Aufgabe (oder eine kleine Auswahl an Aufgaben) entwickelt, und die Plattform wird speziell ausgewählt, um diese Anwendung zu optimieren. Diese Tatsache macht nicht nur das Leben für eingebettete Systementwickler schwierig, sondern auch das Debuggen und Testen dieser Systeme schwieriger, da für verschiedene Plattformen unterschiedliche Debugging -Tools benötigt werden.

Trotz der oben erwähnten Herausforderung der Heterogenität wurden einige Debugger sowohl kommerziell als auch Forschungsprototypen entwickelt. Beispiele für kommerzielle Lösungen kommen von Software Green Hills,[17] Lauterbach GmbH[18] und Mplab-ICD von Microchip (für In-Circuit-Debugger). Zwei Beispiele für Forschungsprototyp -Tools sind Aveksha[19] und Flocklab.[20] Sie alle nutzen eine Funktionalität, die für kostengünstige eingebettete Prozessoren verfügbar ist, ein On-Chip-Debug-Modul (OCDM), dessen Signale über einen Standard ausgesetzt sind JTAG -Schnittstelle. Sie werden auf der Grundlage der Änderung der Anwendung und der Ereignisrate, mit der sie Schritt halten können, bewertet.

Zusätzlich zur typischen Aufgabe, Fehler im System zu identifizieren Merkmale (z. B. Energieverbrauch, Zuverlässigkeit, Echtzeitantwort usw.).

Anti-Debugging

Anti-Debugging ist "die Implementierung einer oder mehrerer Techniken im Computercode, der Versuche behindert Reverse Engineering oder einen Zielprozess debuggen ".[21] Es wird aktiv von anerkannten Verlage in verwendet Kopierschutz Schemas, wird aber auch von verwendet von Malware seine Erkennung und Eliminierung erschweren.[22] Zu den bei Anti-Debugging verwendeten Techniken gehören:

  • API-basiert: Überprüfen Sie die Existenz eines Debuggers mit Systeminformationen
  • Ausnahmebasierte: Überprüfen Sie, ob Ausnahmen gestört werden
  • Prozess- und Threadblöcke: Überprüfen Sie, ob Prozess- und Fadenblöcke manipuliert wurden
  • Modifizierter Code: Überprüfen Sie die Code -Änderungen,
  • Hardware- und Registerbasiert: Überprüfen Sie die Hardware-Haltepunkte und CPU-Register
  • Timing und Latenz: Überprüfen Sie die Zeit für die Ausführung von Anweisungen
  • Debugger erkennen und bestrafen[22]

In frühen Versionen von gab es ein frühes Beispiel für Anti-Debugging Microsoft Word Was, wenn ein Debugger erkannt wurde, eine Nachricht erstellte, in der "der Baum des Bösen bittere Früchte trägt. Jetzt Müllprogramm -Datenträger", woraufhin er das Floppy -Scheiben -Drive dazu brachte, alarmierende Geräusche mit der Absicht zu erschrecken, den Benutzer wegzuschrecken vom Versuch erneut.[23][24]

Siehe auch

Verweise

  1. ^ "Infoworld 5. Oktober 1981". 5. Oktober 1981. Archiviert Aus dem Original am 18. September 2019. Abgerufen 17. Juli, 2019.
  2. ^ "Archivierte Kopie". Archiviert vom Original am 2019-11-21. Abgerufen 2019-12-17.{{}}: CS1 Wartung: Archiviertes Kopie als Titel (Link)
  3. ^ S. Gill, Die Diagnose von Fehlern in Programmen auf dem EDSAC Archiviert 2020-03-06 am Wayback -Maschine, Proceedings der Royal Society of London. Serie A, Mathematical and Physical Sciences, Vol. 206, Nr. 1087 (22. Mai 1951), S. 538-554
  4. ^ Robert V. D. Campbell, Entwicklung der automatischen Berechnung Archiviert 2019-09-18 bei der Wayback -Maschine, Proceedings des ACM National Meeting von 1952 (Pittsburgh), S. 29-32, 1952.
  5. ^ Alex Orden, Lösung von Systemen linearer Ungleichheiten auf einem digitalen Computer, Proceedings des ACM National Meeting von 1952 (Pittsburgh), p. 91-95, 1952.
  6. ^ Howard B. Demuth, John B. Jackson, Edmund Klein, N. Metropolis, Walter Orvedahl, James H. Richardson, WAHNSINNIG doi = 10.1145/800259.808982, Proceedings of the 1952 ACM National Meeting (Toronto), p. 13-16
  7. ^ Das kompatible Zeitaustauschsystem Archiviert 2012-05-27 bei der Wayback -MaschineM.I.T. Press, 1963
  8. ^ Peggy Aldrich Kidwell, Stalkieren des schwer fassbaren Computerbuges, IEEE Annals of the History of Computing, 1998.
  9. ^ "Postmortem Debugging". Archiviert vom Original am 2019-12-17. Abgerufen 2019-12-17.
  10. ^ E. J. Gauß (1982). "Pracniquen: Der Algorithmus" Wolfszaun "zum Debuggen". Kommunikation der ACM. 25 (11): 780. doi:10.1145/358690.358695. S2CID 672811.
  11. ^ Zeller, Andreas (2005). Warum Programme scheitern: Ein Leitfaden zum systematischen Debuggen. Morgan Kaufmann. ISBN 1-55860-866-4.
  12. ^ "Kent Beck, schlug sie hoch, schlug 'em niedrig: Regressionstest und die Saffel". Archiviert von das Original Am 2012-03-11.
  13. ^ Rainsberger, J.B. "Die Saffel". Der Code Whisperer. Abgerufen 28. März 2022.
  14. ^ Zeller, Andreas (2002-11-01). "Isolieren von Ursache-Wirkungsketten aus Computerprogrammen". ACM Sigsoft Software Engineering Notizen. 27 (6): 1–10. doi:10.1145/605466.605468. ISSN 0163-5948. S2CID 12098165.
  15. ^ Bond, Michael D.; Nethercote, Nicholas; Kent, Stephen W.; Guyer, Samuel Z.; McKinley, Kathryn S. (2007). "Bad Äpfel verfolgen". Verfahren der 22. jährlichen ACM -Sigplan -Konferenz über objektorientierte Programmiersysteme und Anwendungen - OOPSLA '07. p. 405. doi:10.1145/1297027.1297057. ISBN 9781595937865. S2CID 2832749.
  16. ^ Cornu, Benoit; Barr, Earl T.; Seinturier, Lionel; Monperrus, Martin (2016). "Casper: Automatische Verfolgung von Null Dereferenzen bis zur Inception mit Kausalitätsspuren". Zeitschrift für Systeme und Software. 122: 52–62. Arxiv:1502.02004. doi:10.1016/j.js.2016.08.062. ISSN 0164-1212. S2CID 28161871. Archiviert vom Original am 2022-01-25. Abgerufen 2019-06-23.
  17. ^ "Supertrace Probe -Hardware -Debugger". www.ghs.com. Archiviert vom Original am 2017-12-01. Abgerufen 2017-11-25.
  18. ^ "Debugger- und Echtzeit-Trace-Tools". www.lauterbach.com. Archiviert vom Original am 2022-01-25. Abgerufen 2020-06-05.
  19. ^ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha: Ein Hardware-Software-Ansatz für die nicht störende Verfolgung und Profilierung von drahtlosen eingebetteten Systemen". Verfahren der 9. ACM -Konferenz über eingebettete vernetzte Sensorsysteme. Sensys '11. New York, NY, USA: ACM: 288–301. doi:10.1145/2070942.2070972. ISBN 9781450307185. S2CID 14769602.
  20. ^ Lim, Roman; Ferrari, Federico; Zimmerling, Marco; Walser, Christoph; Sommer, Philipp; Beutel, Jan (2013). "Flocklab: Ein Testbett für verteilte, synchronisierte Verfolgung und Profilierung von drahtlosen eingebetteten Systemen". Verfahren der 12. Internationalen Konferenz zur Informationsverarbeitung in Sensornetzwerken. Ipsn '13. New York, NY, USA: ACM: 153–166. doi:10.1145/2461381.2461402. ISBN 9781450319591. S2CID 447045.
  21. ^ Shields, Tyler (2008-12-02). "Anti-Debugging-Serie-Teil I". Veracode. Archiviert vom Original am 2016-10-19. Abgerufen 2009-03-17.
  22. ^ a b "Softwareschutz durch Anti-Debugging Michael N Gagnon, Stephen Taylor, Anup Ghosh" (PDF). Archiviert von das Original (PDF) Am 2011-10-01. Abgerufen 2010-10-25.
  23. ^ Ross J. Anderson (2001-03-23). Sicherheitstechnik. p. 684. ISBN 0-471-38922-6.
  24. ^ "Microsoft Word für DOS 1.15". Archiviert vom Original am 2013-05-14. Abgerufen 2013-06-22.

Weitere Lektüre

  • Agans, David J. (2002). Debugging: Die neun unverzichtbaren Regeln für die Suche nach den schwer fassbarsten Software- und Hardwareproblemen. Amakom. ISBN 0-8144-7168-4.
  • Blunden, Bill (2003). Software -Exorzismus: Ein Handbuch zum Debugieren und Optimieren des Legacy -Code. Apress. ISBN 1-59059-234-4.
  • Ford, Ann R.; Teorey, Toby J. (2002). Praktisches Debuggen in C ++. Prentice Hall. ISBN 0-13-065394-2.
  • Grötker, Thorsten; Holtmann, Ulrich; Kedy, Holger; Wloka, Markus (2012). Der Entwicklerleitfaden zum Debuggen, zweite Ausgabe. CreateSpace. ISBN 978-1-4701-8552-7.
  • Metzger, Robert C. (2003). Debugging durch Denken: Ein multidisziplinärer Ansatz. Digitale Presse. ISBN 1-55558-307-5.
  • Myers, Glenford J (2004). Die Kunst des Softwaretests. John Wiley & Sons Inc. ISBN 0-471-04328-1.
  • Robbins, John (2000). Debugging -Anwendungen. Microsoft Press. ISBN 0-7356-0886-5.
  • Telles, Matthew A.; Hsieh, Yuan (2001). Die Wissenschaft des Debuggens. Die Coriolis -Gruppe. ISBN 1-57610-917-8.
  • Vostokov, Dmitry (2008). Gedächtnisanalyse Anthologie Band 1. OpenTask. ISBN 978-0-9558328-0-2.
  • Zeller, Andreas (2009). Warum Programme scheitern, zweite Ausgabe: Ein Leitfaden zum systematischen Debuggen. Morgan Kaufmann. ISBN 978-0-1237-4515-6.

Externe Links