CPU-Fenster

Aus RAD Studio (Deutsch)
Wechseln zu: Navigation, Suche

Nach oben zu Fenster zur Fehlersuche - Index

Ansicht > Debug-Fenster > CPU-Fenster

Verwenden Sie das Fenster CPU zum Anzeigen des Assembly-Sprachcodes für das aktuell im Debugger befindliche Programm. Dieses Fenster wird automatisch geöffnet, wenn die Programmausführung an einer Position anhält, für die kein Quellcode verfügbar ist.

Das Fenster CPU ist in die folgenden Bereiche unterteilt.

Bereich Beschreibung

Adressstatus (im oberen Bereich des Fensters)

Zeigt die effektive Adresse (falls verfügbar) und den an dieser Adresse gespeicherten Wert an. Wenn Sie beispielsweise eine Adresse auswählen, die einen Ausdruck in eckigen Klammern wie [eax+edi*4-0x0F] enthält, werden die referenzierte Stelle im Speicher und ihr aktueller Wert angezeigt.

Die aktuelle Thread-ID wird ebenfalls angezeigt.

Disassembly-Ausschnitt (obere linke Seite)

Zeigt die Adresse, die hexadezimale Repräsentation der Maschinencodeanweisungen (Opcodes), und die Assembly-Anweisungen für alle Quelltextzeilen an. Die Adresse ist der Offset für die Disassembly-Methode.

Wenn Sie verwalteten Code debuggen, entsprechen die Assembly-Anweisungen dem vom JIT-Compiler erzeugten nativen Code. Das vom Compiler erzeugte MSIL (Microsoft Intermediate Language) wird auch angezeigt. Beachten Sie bitte, dass es keine 1:1-Beziehung zwischen den nativen Codeanweisungen und den MSIL-Anweisungen gibt. MSIL-Anweisungen können nicht im Einzelschrittmodus getestet werden und es können auch keine Haltepunkte gesetzt werden.

Falls Debug-Informationen verfügbar sind, so zeigt der Debugger den zu den Assembly-Anweisungen gehörenden Quelltext an.

Ein grüner Pfeil (Ausführungspunkt) links neben der Adresse gibt die momentane Position des Ausführungspunkts an.

Wenn die aktuelle Anweisung eine Transferanweisung ist (z.B. call oder jmp), zeigt ein Aufwärts- oder Abwärts-Pfeil die Zielrichtung der Transferanweisung an. Wenn sich das Ziel beispielsweise vor der aktuellen Anweisung befindet, wird ein Aufwärts-Pfeil angezeigt. Befindet sich das Ziel nach der aktuellen Anweisung, wird ein Abwärts-Pfeil angezeigt.

Bei konditionalen Transferanweisungen (z.B. jz oder jle) wird nur ein Pfeil angezeigt, wenn die Bedingung true ist. Bei konditionalen Set-Anweisungen (z.B. seta oder setz) wird ein Links-Pfeil angezeigt, wenn die Bedingung true ist.

Registerausschnitt (obere mittlere Seite)

Zeigt die Inhalte der CPU-Register des 80386 und höherer Prozessoren an. Diese Register setzen sich aus acht 32 Bit-Vielzweckregistern und dem 32 Bit-Programmzähler (EIP) zusammen.

Beim Debuggen von Win32-Code werden auch das Flags-Register (EFL) und die sechs Segmentregister angezeigt.

Nach dem Ausführen einer Anweisung werden im CPU-Registerausschnitt etwaige Register, deren Wert sich gegenüber der letzten Programmpause geändert hat, rot markiert.

Speicherauszugausschnitt (untere, linke Seite)

Wird nur für unverwalteten Code angezeigt. Zeigt die Rohwerte an, die in adressierbaren Bereichen Ihres Programms enthalten sind. Dieser Ausschnitt zeigt die Speicheradressen, die aktuellen Werte im Speicher und eine ASCII-Repräsentation der Werte im Speicher. Ganz links auf jeder Zeile wird die Anfangsadresse der Zeile angezeigt. Auf die Adresse folgt eine 8 Byte lange hexadezimale Liste der an dieser Speicheradresse befindlichen Werte. Jedes Byte im Speicher wird durch zwei Hexadezimalziffern wiedergegeben. Auf die hexadezimale Anzeige folgt eine ASCII-Anzeige des Speichers. Nicht druckbare Werte werden durch einen Punkt wiedergegeben.

Betätigen Sie die STRG+Nach-Links-Taste oder die STRG+Nach-Rechts-Taste, um die Anfangsposition der Anzeige um ein Byte nach oben oder nach unten zu verschieben.

Flags-Ausschnitt (obere rechte Seite)

Wird nur für unverwalteten Code angezeigt. Zeigt den gegenwärtigen Zustand der im 32 Bit-Register EFL enthaltenen Flags und der Informations-Bits an. Nach Ausführung einer Anweisung markiert der Flags-Ausschnitt etwaige Flags, deren Wert sich gegenüber der letzten Programmpause geändert hat, rot.

Der Prozessor verwendet die Bits in diesem Register, um bestimmte Operationen zu steuern und den Status des Prozessors nach Ausführung bestimmter Anweisungen anzuzeigen:

Bewegen Sie die Maus über ein Flag, um den Flag-Namen anzuzeigen.

Maschinen-Stack-Ausschnitt (untere, linke Seite)

Wird nur für unverwalteten Code angezeigt. Zeigt die Rohwerte an, die in Ihrem Programm-Stack enthalten sind. Der Ausschnitt besteht aus drei Abschnitten: den Speicheradressen, den aktuellen Werten im Stack und einer ASCII-Darstellung der Werte im Stack. Ein grüner Pfeil gibt den Wert ganz oben im Aufruf-Stack an.



Inhaltsverzeichnis

Die einzelnen Bereiche des CPU-Fensters sind andockbar

Sie können jetzt über das Untermenü Ansicht > Debug-Fenster > CPU-Fenster einen einzelnen Bereich des Fensters CPU (wie z.B. Disassembly, Register oder Stack) öffnen. Die einzelnen Bereiche sind andockbare Ansichten, die Sie in der IDE verschieben können.

Das CPU-Fenster wird automatisch geschlossen

Wenn auf der Registerkarte Tools > Optionen > Debugger-Optionen die Option Beim Debuggen implizit geöffnete Dateien automatisch schließen aktiviert ist, wird das CPU-Fenster am Ende der Debug-Sitzung automatisch geschlossen. Wenn das CPU-Fenster allerdings das oberste Fenster ist, wird es nicht geschlossen.

Im Disassembly-Ausschnitt blättern

Verwenden Sie zum Blättern im Disassembly-Ausschnitt eine der folgenden Methoden:

  • Betätigen Sie die STRG+Nach-Links-Taste und die STRG+Nach-Rechts-Taste, um die Anfangsposition der Anzeige um ein Byte nach oben oder nach unten zu verschieben. Beachten Sie, dass die Veränderung der Anfangsposition der Anzeige im Disassembly-Ausschnitt die Stelle verschiebt, an welcher der Debugger mit dem Disassemblieren des Maschinencodes beginnt.
  • Klicken Sie ober- oder unterhalb des Bildlauffeldes auf der vertikalen Bildlaufleiste, um eine Bildschirmseite nach oben oder unten zu blättern. (Wegen der vielen Informationen, die im Disassembly-Ausschnitt zur Verfügung stehen, ist das Ziehen des Bildlauffeldes deaktiviert.)
  • Verwenden Sie die Befehle des Kontextmenüs Zu Adresse gehen > , Zu aktuellem EIP > , Verfolgen > und Vorheriger wie im folgenden Abschnitt beschrieben.

Kontextmenü

Die folgende Tabelle führt in alphabetischer Reihenfolge die Befehle für die Ausschnitte des Fensters CPU auf. Klicken Sie im CPU-Fenster mit der rechten Maustaste, um auf die folgenden Befehle zuzugreifen:

Element Beschreibung

Haltepunkt-Eigenschaften

Zeigt das Dialogfeld Eigenschaften des Adresshaltepunkts an.

Aufrufende Routine

Positioniert den Disassembly-Ausschnitt auf der Anweisung nach derjenigen, die den aktuellen Interrupt oder das aktuelle Unterprogramm aufgerufen hat. Hat die aktuelle Interrupt-Routine Datenelemente auf den Stack gelegt, so ist der Debugger möglicherweise nicht in der Lage, festzustellen, von wo aus die Routine aufgerufen wurde.

Aufrufende Routine arbeitet am besten, wenn Sie die Option Stack-Frames unter Code-Erzeugung (auf der Seite Projekt > Optionen > Compiler) aktiviert ist.

Änderung

Ermöglicht Ihnen das Ändern der an der aktuellen Cursor-Position befindlichen Bytes und fordert Sie auf, ein Element des aktuell angezeigten Typs einzugeben.

Register wechseln

Zeigt das Dialogfeld Register wechseln an, in dem Sie einen neuen Wert für das Register eingeben können. Sie können die Ausdrucksauswertung in vollem Umfang nutzen, um neue Werte einzugeben. Denken Sie daran, dass Sie vor Hexadezimalwerten das Präfix $ eingeben müssen.

Thread wechseln

Zeigt das Dialogfeld Thread auswählen an, in dem Sie aus der Thread-Liste einen neuen Thread auswählen können, der im Debugger getestet werden soll. Wenn Sie im Flags-Ausschnitt einen neuen Thread auswählen, geben alle Ausschnitte im CPU-Fenster den Zustand der CPU für diesen Thread wieder.

Kopieren

Die markierte Meldung wird in die Zwischenablage kopiert. Im Disassembly-Fenster können Sie eine einzelne Anweisung auswählen oder die Taste UMSCHALT zur Auswahl mehrerer Anweisungen verwenden. In allen anderen Fenstern lässt sich nur jeweils ein Element zum Kopieren auswählen.

Register dekrementieren

Subtrahiert 1 vom Wert des momentan markierten Registers. Diese Option ermöglicht Ihnen das Testen von Fehlern der Sorte "knapp daneben", indem Sie geringfügige Änderungen an den Registerwerten vornehmen.

Anzeigen als

Formatiert die im Maschinen-Stack-Ausschnitt des CPU-Fensters angezeigten Daten. Wählen Sie aus den folgenden Formaten aus:

Datentyp Anzeigeformat.

Bytes Zeigt Daten als hexadezimale Bytes an

Words Zeigt Daten als 2 Bytes lange hexadezimale Zahlen an

DWords Zeigt Daten als 4 Bytes lange hexadezimale Zahlen an

Singles Zeigt Daten als 4 Bytes lange Nachkommazahlen in wissenschaftlicher Notation an

Aktiviert

Ist nur beim Klicken mit der rechten Maustaste auf einen Haltepunkt verfügbar. Schaltet den Haltepunkt zwischen aktiviert und deaktiviert um.

Verfolgen

Positioniert den Ausschnitt an der Zieladresse der momentan markierten Ausweisung.

Zu Adresse gehen

Zeigt das Dialogfeld Position eingeben an, in dem Sie ein Symbol oder für verwalteten Code eine Adresse im JIT-Compiler-Format (Just In Time) eingeben können.

Zu aktuellem EIP

Positioniert das Fenster CPU am Ort des aktuellen Programmzählers (die vom Register EIP angegebene Adresse). Diese Stelle gibt die nächste von Ihrem Programm auszuführende Anweisung an.

Register inkrementieren

Addiert 1 zum Wert des momentan markierten Registers. Diese Option ermöglicht Ihnen das Testen von Fehlern der Sorte "knapp daneben", indem Sie geringfügige Änderungen an den Registerwerten vornehmen.

Gemischter IL-Code

Beim Debuggen von verwaltetem Code wird die Anzeige gewechselt, damit MSIL-Anweisungen angezeigt werden.

Gemischte Quelle

Schaltet das Anzeigeformat zwischen "Nur Assembly-Anweisungen" und "Assembly-Anweisungen und dem zugehörigen Quelltext" (wenn Debug-Informationen verfügbar sind) um.

Neuer EIP

Verändert die Position des Anweisungszeigers (des Wertes des Registers EIP) auf die momentan im Disassembly-Ausschnitt markierte Zeile. Verwenden Sie diesen Befehl, wenn Sie bestimmte Maschinenanweisungen übergehen möchten. Wenn Sie mit der Programmausführung fortfahren, beginnt die Ausführung an dieser Adresse.

Dieser Befehl ist nicht dasselbe wie die Einzelschrittausführung von Anweisungen. Der Debugger führt keinerlei Anweisungen aus, die Sie möglicherweise übergehen.

Verwenden Sie diesen Befehl mit äußerster Vorsicht. Leicht kann es passieren, dass Ihr System in einen instabilen Zustand gerät, wenn Sie Programmanweisungen übergehen.

Weiter

Findet das nächste Vorkommen des Elements, nach dem Sie zuletzt im Speicherauszugs-Ausschnitt gesucht haben.

Zurück

Setzt das Fenster CPU auf den Zustand zurück, den es vor dem letzten Befehl Verfolgen hatte.

Zu aktueller Zeile gehen

Lässt Ihr Programm bei voller Geschwindigkeit zu der Anweisung laufen, die Sie im Fenster CPU markiert haben. Nachdem Ihr Programm angehalten wurde, können Sie diesen Befehl verwenden, um die Fehlersuche an einer bestimmten Programmanweisung wieder aufzunehmen.

Suchen

Zeigt das Dialogfeld Such-Bytes eingeben an, mit dem Sie im Fenster CPU in Vorwärtsrichtung nach einem Ausdruck oder einer Liste von Bytes suchen können (Details erhalten Sie, wenn Sie im Dialogfeld Such-Bytes eingeben auf Hilfe klicken).

Adressen anzeigen

Schließt Anweisungsadressen ein.

Opcodes anzeigen

Schließt Anweisungs-Opcodes ein. Wählen Sie Auto, Immer oder Nie. Auto ist der Standardwert, der bewirkt, dass Opcodes immer angezeigt werden, wenn das Fenster breit genug zum Anzeigen der Opcode-Spalte ist.

Haltepunkt umschalten

Fügt an der aktuell markierten Adresse einen Haltepunkt hinzu oder entfernt ihn.

Flag umschalten

Die Flag- und Informations-Bits im Flags-Ausschnitt können jeweils einen der binären Werte 0 oder 1 enthalten. Dieser Befehl schaltet das markierte Flag zwischen diesen beiden Binärwerten um.

Anfang des Stack

Positioniert den Maschinen-Stack-Ausschnitt an der Adresse des Stack-Zeigers (der Adresse, die sich im Register ESP befindet).

FPU anzeigen

Steht nur beim Debuggen von Win32-Code zur Verfügung. Blendet das FPU-Fenster ein, in dem die Fließkommaregister, die MMX-Register und SSE-Register angezeigt werden.

Quelltext anzeigen

Aktiviert den Quelltext-Editor und positioniert den Einfügepunkt an derjenigen Quelltextzeile, die am genauesten der im Fenster CPU markierten disassemblierten Anweisung entspricht. Gibt es keinen zugehörigen Quelltext, so hat dieser Befehl keine Wirkung.

Register auf null

Setzt den Wert des aktuell markierten Registers auf 0.

In anderen Sprachen