Anzeigen von Disassemblierungscode im Visual Studio-Debugger (C#, C++, Visual Basic, F#)
Im Fenster Disassemblierung wird der Assemblycode angezeigt, der den vom Compiler erstellten Anweisungen entspricht. Beim Debuggen von verwaltetem Code entsprechen diese Assemblierungsanweisungen nicht der durch den Visual Studio-Compiler generierten Microsoft Intermediate Language (MSIL), sondern dem durch den Just-In-Time-Compiler (JIT) erstellten nativen Code.
Hinweis
Um das Fenster Disassemblierung in vollem Umfang nutzen zu können, sollten Sie sich mit den Grundlagen der Assemblersprache (Programmiersprache) vertraut machen. Referenzmaterial für Intel-Anweisungssätze finden Sie im 2. Volume der Architekturhandbücher. Dieses Material gilt im Allgemeinen auch für AMD-Anweisungssätze.
Diese Funktion ist nur verfügbar, wenn das Debuggen auf Adressebene aktiviert ist. Sie ist nicht für das Skript- oder SQL-Debuggen verfügbar.
Neben den Assemblyanweisungen können folgende optionale Informationen im Fenster Disassemblierung angezeigt werden:
Speicheradresse, an der sich die einzelnen Anweisungen befinden. Bei nativen Anwendungen ist dies die eigentliche Speicheradresse. Bei Visual Basic oder C# ist dies ein Offset vom Beginn der Funktion.
Quellcode, aus dem der Assemblercode abgeleitet wird.
Codebytes sind Bytedarstellungen der eigentlichen Maschinen- oder MSIL-Anweisungen.
Symbolnamen für die Speicheradressen.
Mit dem Quellcode übereinstimmende Zeilennummern.
Anweisungen in Assemblersprache bestehen aus mnemonischem Code (Abkürzungen für Anweisungsnamen) sowie Symbolen für Variablen, Register und Konstanten. Jede Anweisung in Maschinensprache wird durch einen mnemonischen Code in Assemblersprache dargestellt, dem optional eine oder mehrere Symbole folgen.
Assemblercode basiert in hohem Maß auf Prozessorregistern oder bei verwaltetem Code auf Common Language Runtime-Registern. Sie können das Fenster Disassemblierung zusammen mit dem Fenster Register verwenden, in dem Sie Registerinhalte überprüfen können.
Verwenden Sie zum Anzeigen von Anweisungen in Maschinencode in unformatierter numerischer Form (und nicht in Assemblersprache) das Fenster Speicher, oder wählen Sie Codebytes im Fenster Disassemblierung aus.
Verwenden des Disassembierungsfensters
Klicken Sie unter Extras>Optionen>Debuggen auf Debugging auf Adressebene aktivieren, um das Fenster Disassemblierung zu aktivieren.
Um das Fenster Disassemblierung während des Debuggens zu öffnen, wählen Sie Fenster>Disassemblierung aus, oder drücken Sie ALT+8.
Hinweis
Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren , um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Alle Einstellungen zurücksetzen.
Um optionale Informationen anzuzeigen oder auszublenden, klicken Sie mit der rechten Maustaste in das Fenster Disassemblierung, und aktivieren bzw. deaktivieren Sie im Kontextmenü die gewünschten Optionen.
Ein gelber Pfeil am linken Rand kennzeichnet den aktuellen Ausführungspunkt. Bei nativem Code entspricht der Ausführungspunkt dem Programmzähler der CPU. Diese Position zeigt die nächste Anweisung an, die im Programm ausgeführt wird.
Bildlauf nach oben oder unten im Arbeitsspeicher
Beim Anzeigen des Speicherinhalts im Fenster Arbeitsspeicher oder im Fenster Disassemblierung können Sie mithilfe der vertikalen Scrollleiste im Speicher nach oben oder unten navigieren.
Für einen Bildlauf nach unten (Navigieren zu einer höheren Speicheradresse) klicken Sie auf die vertikale Bildlaufleiste unter dem Bildlauffeld.
Für einen Bildlauf nach oben (Navigieren zu einer niedrigeren Speicheradresse) klicken Sie auf die vertikale Scrollleiste über dem Bildlauffeld.
Beachten Sie auch, dass das Verhalten der vertikalen Bildlaufleiste nicht dem Standardverhalten entspricht. Der Adressbereich eines modernen Computers ist äußerst groß, und eine Suche kann leicht fehlschlagen, wenn Sie das Bildlauffeld der Bildlaufleiste an eine zufällige Position ziehen. Aus diesem Grunde verhält sich das Bildlauffeld, als wäre es beidseitig mit einer Zugfeder verbunden, und verbleibt stets in der Mitte der Bildlaufleiste. In Anwendungen, die in systemeigenem Code geschrieben sind, können Sie einen Bildlauf nach oben oder unten durchführen; die Durchführung eines freien Bildlaufs ist jedoch nicht möglich.
In verwalteten Anwendungen ist die Disassembly auf eine Funktion begrenzt, und Sie können einen normalen Bildlauf durchführen.
Beachten Sie, dass die höheren Adressen am unteren Rand des Fensters angezeigt werden. Wenn Sie eine höhere Adresse anzeigen möchten, müssen Sie nach unten navigieren, nicht nach oben.
Um eine Anweisung nach oben oder unten wechseln
- Klicken Sie auf den Pfeil am oberen oder unteren Ende der vertikalen Scrollleiste.