Debugger

Winpdb Debugging selbst

A Debugger oder Debugging -Tool ist ein Computer Programm gewöhnt an Prüfung und debuggen Andere Programme (das "Ziel" -Programm). Die Hauptverwendung eines Debuggers besteht darin, das Zielprogramm unter kontrollierten Bedingungen auszuführen, mit denen der Programmierer seine laufenden Vorgänge verfolgt und Änderungen der Computerressourcen (am häufigsten vom Zielprogramm oder des Betriebssystems des Computers verwendet) verfolgt, die möglicherweise anzeigen Fehlfunktionscode. Die typischen Debugging -Funktionen umfassen die Möglichkeit, das Zielprogramm an bestimmten Stellen auszuführen oder zu stoppen, den Inhalt des Speichers, CPU -Register oder Speichergeräte (wie Festplattenantriebe) anzuzeigen und den Speicher- oder Registrierungsinhalt zu ändern, um ausgewählte Testdaten einzugeben, die möglicherweise eingegeben werden können, die möglicherweise eingegeben werden können, die möglicherweise eingegeben werden können, die möglicherweise eingegeben werden können eine Ursache für fehlerhafte Programmausführung sein.

Der zu untersuchende Code kann alternativ auf einem ausgeführt werden Anweisungssatz Simulator (ISS), eine Technik, die eine große Leistung in ihrer Fähigkeit ermöglicht, zu stoppen, wenn bestimmte Bedingungen auftreten, aber in der Regel etwas langsamer ist als der Code direkt auf dem entsprechenden (oder gleichen) Prozessor auszuführen. Einige Debugger bieten zwei Betriebsmodi, vollständige oder teilweise Simulation, um diese Wirkung einzuschränken.

EIN "fangen"tritt auf, wenn das Programm normalerweise aufgrund a normalerweise fortgesetzt werden kann Programmierfehler oder ungültige Daten. Zum Beispiel hat das Programm möglicherweise versucht, einen Anweisungen zu verwenden, der auf der aktuellen Version der nicht verfügbar ist Zentralprozessor oder versucht, nicht verfügbar zu machen oder geschützt Erinnerung. Wenn das Programm "Fallen" oder eine voreingestellte Bedingung erreicht, zeigt der Debugger den Ort im Originalcode normalerweise, wenn es a ist Debugger auf Quellenebene oder Symbolischer Debugger, häufig in gesehen in Integrierte Entwicklungsumgebungen. Wenn es a ist Low-Level-Debugger oder ein Maschinensprachiger Debugger es zeigt die Linie in der Demontage (Es sei denn, es hat auch Online -Zugriff auf den ursprünglichen Quellcode und kann den entsprechenden Codeabschnitt aus der Montage oder Kompilierung anzeigen).

Merkmale

In der Regel bieten Debugger einen Abfrageprozessor, einen Symbol Resolver, einen Ausdrucksinterpreter und eine Debug -Support -Schnittstelle auf der obersten Ebene an.[1] Debugger bieten auch anspruchsvollere Funktionen wie das Ausführen eines Programms Schritt für Schritt (Einzelschritt oder Programmanimation), stoppen (Brechen) (pausieren Sie das Programm, um den aktuellen Zustand zu untersuchen) bei einem Ereignis oder angegebenen Anweisungen mittels a Haltepunktund verfolgen die Werte von Variablen.[2] Einige Debugger haben die Möglichkeit, den Programmstatus während des Laufens zu ändern. Es kann auch möglich sein, die Ausführung an einem anderen Ort im Programm fortzusetzen, um einen Absturz oder einen logischen Fehler zu umgehen.

Die gleiche Funktionalität, die einen Debugger für die Korrektur von Fehler nützlich macht, ermöglicht es, als verwendet zu werden Software Cracking Werkzeug zum Ausweichen Kopierschutz, Management von Digitalen Rechtenund andere Softwareschutzfunktionen. Es macht es oft auch als allgemeines Überprüfungswerkzeug nützlich, Fehlerabdeckung, und Leistungsanalysator, besonders wenn Anweisungspfadlängen werden gezeigt.[3] Frühe Mikrocomputer mit diskbasierten Speicher profitierten häufig von der Fähigkeit, beschädigte Verzeichnis- oder Registrierungsdatensätze zu diagnostizieren und wiederherzustellen, zu "uneLete" -Dateien, die als gelöscht gekennzeichnet sind, oder zum Schutz des Dateikennworts.

Die meisten Mainstream -Debugging -Motoren wie z. GDB und DBX, konsole basieren Befehlszeilenschnittstellen. Debugger Frontends sind beliebte Erweiterungen für Debugger -Motoren, die bieten Ide Integration, Programmanimationund Visualisierungsmerkmale.

Debugging aufzeichnen und wiederholen

Debugging aufzeichnen und wiederholen,[4] Auch als "Software -Flugaufzeichnung" oder "Programmausführungsaufzeichnung" bezeichnet, erfasst sich Änderungen des Anwendungsstatus und speichert sie auf der Festplatte, während jede Anweisung in einem Programm ausgeführt wird. Die Aufzeichnung kann dann immer wieder wiederholt und interaktiv debuggen, um Defekte zu diagnostizieren und zu lösen. Rekord- und Wiederholungsdebugging ist sehr nützlich für das entfernte Debuggen und für die Lösung intermittierender, nicht deterministischer und anderer schwer zu reproduzierter Defekte.

Rückwärtsdebugging

Einige Debugger enthalten eine Funktion namens "Rückwärtsdebugging", auch als" historisches Debugging "oder" Rückwärtsdebugging "bekannt. Diese Debugger ermöglichen es, die Ausführung eines Programms rechtzeitig rückwärts zu treten. Verschiedene Debugger enthalten diese Funktion. Microsoft Visual Studio (2010 Ultimate Edition, 2012 Ultimate, 2013 Ultimate und 2015 Enterprise Edition) bietet Intellitrace Reverse Debugging für C#, Visual Basic .NET und einige andere Sprachen, aber nicht C ++. Reverse Debuggers existieren auch für C, C ++, Java, Python, Perl und andere Sprachen. Einige sind Open Source; Einige sind proprietäre kommerzielle Software. Einige umgekehrte Debugger verlangsamen das Ziel durch Größenordnungen, aber die besten umgekehrten Debugger verursachen eine Verlangsamung von 2 × oder weniger. Reverse Debugging ist sehr nützlich für bestimmte Arten von Problemen, wird jedoch noch nicht häufig verwendet.[5]

Zeitreise -Debugging

Zusätzlich zu den Funktionen von Reverse Debuggers, Zeitreise -Debugging Ermöglichen Sie den Benutzern auch, mit dem Programm zu interagieren, den Verlauf der Geschichte zu ändern, und beobachten Sie, wie das Programm reagiert.

Sprachabhängigkeit

Einige Debugger arbeiten mit einer einzigen spezifischen Sprache, während andere mehrere Sprachen transparent bewältigen können. Zum Beispiel, wenn das Hauptzielprogramm in geschrieben ist in Cobol aber Anrufe Montagesprache Unterroutinen und PL/1 Unterroutinen müssen der Debugger möglicherweise dynamisch Modi wechseln, um die Veränderungen in der Sprache zu berücksichtigen, sobald sie auftreten.

Gedächtnisschutz

Einige Debugger enthalten auch den Gedächtnisschutz, um zu vermeiden Speicherverstöße wie zum Beispiel Pufferüberlauf. Dies kann äußerst wichtig sein in Transaktionsverarbeitung Umgebungen, in denen Speicher dynamisch aus Speicherpools auf Aufgabe zugewiesen wird.

Hardwareunterstützung für Debugging

Die meisten modernen Mikroprozessoren haben mindestens eines dieser Merkmale in ihren CPU -Design Um das Debuggen zu erleichtern:

  • Hardwareunterstützung für ein Programm mit einem Programm wie dem Fallenflagge.
  • Ein Anweisungssatz, der dem entspricht Popek- und Goldberg -Virtualisierungsanforderungen Erleichtert das Schreiben von Debugger -Software, die auf derselben CPU ausgeführt wird wie die Software, die debuggiert wird. Eine solche CPU kann die inneren Schleifen des zu testenden Programms mit voller Geschwindigkeit ausführen und bleiben immer noch unter Debugger -Kontrolle.
  • In-System-Programmierung Ermöglicht ein externer Hardware -Debugger, ein zu testendes System neu zu programmieren (z. B. Hinzufügen oder Entfernen von Anweisungsbestandteilen). Viele Systeme mit einer solchen ISP -Unterstützung haben auch andere Hardware -Debug -Unterstützung.
  • Hardwareunterstützung für Code und Daten Haltepunkte, wie Adressvergleiche und Datenwertvergleiche oder, mit erheblich mehr Arbeit, beteiligt, Seitenfehler Hardware.[6]
  • Jtag Zugriff auf Hardware -Debug -Schnittstellen wie die auf Armarchitektur Prozessoren oder verwenden die Nexus Befehlssatz. Die in eingebetteten Systemen verwendeten Prozessoren haben in der Regel eine umfangreiche JTAG -Debug -Unterstützung.
  • Mikrocontroller mit nur sechs Stiften müssen für JTAG mit niedrigem Pin-Count-Substitut wie JTAG verwendet werden, wie z. BDM, Spionage-Bi-Wire, oder Debugwire auf der Atmel Avr. DebugWire zum Beispiel verwendet eine bidirektionale Signalübertragung auf dem Reset -Pin.

Debugger Frontends

Einige der fähigsten und beliebtesten Debugger implementieren nur eine einfache Befehlszeilenschnittstelle (CLI) - oft, um zu maximieren Portabilität und minimieren Sie den Ressourcenverbrauch. Entwickler erwägen normalerweise das Debuggen über a grafische Benutzeroberfläche (GUI) einfacher und produktiver. Dies ist der Grund für visuelle Frontends, die es Benutzern ermöglichen, unterwürfige Cli-nur-Debugger über zu überwachen und zu steuern grafische Benutzeroberfläche. Einige GUI-Debugger-Frontends sind so konzipiert, dass sie mit einer Vielzahl von Cli-nur-Debuggern kompatibel sind, während andere auf einen bestimmten Debugger ausgerichtet sind.

Liste der Debugger

Einige weit verbreitete Debugger sind:

Vorhin Minicomputer Zu den Debuggern gehören:

Mainframe Zu den Debuggern gehören:

Siehe auch

Verweise

Zitate

  1. ^ Aggarwal und Kumar, p. 302.
  2. ^ Aggarwal und Kumar 2003, p. 301.
  3. ^ Aggarwal und Kumar, S. 307-312.
  4. ^ O'Callahan, Robert; Jones, Chris; Froyd, Nathan; Huey, Kyle; Noll, Albert; Partush, Nimrod (2017). "Engineering Record und Wiederholung für den Bereitstellungsfähigkeit erweiterten technischen Bericht". Arxiv:1705.05937 [cs.pl].
  5. ^ Philip Claßen; Software rückgängig machen. "Warum wird das umgekehrte Debuggen selten verwendet?". Programmierer Stack Exchange. Stack Exchange, Inc.. Abgerufen 12. April 2015.
  6. ^ Aggarwal und Kumar 2003, S. 299-301.

Quellen

Externe Links