CPU-Fenster
Nach oben zu Fenster zur Fehlersuche - Index
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.
Inhaltsverzeichnis |
Die einzelnen Bereiche des CPU-Fensters sind andockbar
Sie können jetzt über das Untermenü 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 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 ) 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. |