Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Debugmodul (DE) sendet in der Regel eines der folgenden Ereignisse als letztes Startereignis:
Das Einstiegspunktereignis, wenn an ein neu gestartetes Programm angefügt wird
Falls Sie an ein bereits laufendes Programm das Ereignis der vollständigen Ladung anhängen
Beide Ereignisse sind Stop-Ereignisse, d. h., die DE wartet mithilfe der IDE auf eine Antwort von dem Benutzer. Weitere Informationen finden Sie unter Betriebsmodi.
Beenden des Ereignisses
Wenn ein Stoppereignis an die Debugsitzung gesendet wird:
Das Programm und der Thread, der den aktuellen Anweisungszeiger enthält, kann über die Ereignisschnittstelle abgerufen werden.
Die IDE bestimmt die aktuelle Quellcodedatei und die aktuelle Position, die im Editor als hervorgehoben angezeigt wird.
Die Debugsitzung antwortet in der Regel auf dieses erste Stoppereignis, indem die Continue-Methode des Programms aufgerufen wird.
Das Programm läuft dann weiter, bis eine Abbruchbedingung eintritt, z. B. wenn ein Haltepunkt erreicht wird. In diesem Fall sendet die DE ein Haltepunktereignis an die Debugsitzung. Das Haltepunktereignis ist ein Stoppereignis, und die DE wartet erneut auf eine Benutzerantwort.
Wenn der Benutzer sich entscheidet, in eine Funktion hineinzugehen, über sie hinwegzugehen oder aus ihr herauszutreten, fordert die IDE die Debug-Sitzung auf, die Methode des
StepProgramms aufzurufen. Die IDE übergibt dann die Schrittgröße (Instruktion, Anweisung oder Zeile) und die Schrittart (ob in die Funktion hineinspringen, darüber hinweggehen oder aus der Funktion herausspringen soll). Wenn der Schritt abgeschlossen ist, sendet die DE ein Schritt abgeschlossenes Ereignis an die Debugsitzung, bei der es sich um ein Stoppereignis handelt.-oder-
Wenn der Benutzer die Ausführung über den aktuellen Anweisungspunkt fortsetzen möchte, fordert die IDE die Debugsitzung auf, die Execute-Methode des Programms aufzurufen. Das Programm setzt die Ausführung fort, bis die nächste Beendigungsbedingung auftritt.
-oder-
Wenn die Debugsitzung ein bestimmtes Stoppereignis ignoriert, ruft die Debugsitzung die Continue-Methode des Programms auf. Wenn das Programm bei Auftreten der Beendigungsbedingung in eine Funktion eintritt, über eine Funktion hinweggeht oder aus einer Funktion austritt, wird ein Schritt weiter ausgeführt.
Wenn die DE auf eine Beendigungsbedingung trifft, sendet sie programmgesteuert solche Stoppereignisse wie IDebugLoadCompleteEvent2 oder IDebugEntryPointEvent2 mithilfe einer IDebugEventCallback2-Schnittstelle an den Sitzungsdebug-Debug-Manager (SDM). Die DE übergibt die IDebugProgram2 - und IDebugThread2-Schnittstellen , die das Programm und den Thread darstellen, der den aktuellen Anweisungszeiger enthält. Die SDM ruft IDebugThread2::EnumFrameInfo auf, um den oberen Stapelframe abzurufen, und ruft IDebugStackFrame2::GetDocumentContext auf, um den dem aktuellen Anweisungszeiger zugeordneten Dokumentkontext abzurufen. Dieser Dokumentkontext ist in der Regel ein Quellcodedateiname, eine Zeile und eine Spaltennummer. Die IDE verwendet diese, um den Quellcode hervorzuheben, der den aktuellen Anweisungszeiger enthält.
Das SDM reagiert in der Regel auf dieses erste Stoppereignis, indem IDebugProgram2::Continue aufgerufen wird. Das Programm wird dann ausgeführt, bis eine Beendigungsbedingung auftritt, z. B. durch Drücken eines Haltepunkts, in diesem Fall sendet die DE eine IDebugBreakpointEvent2-Schnittstelle an das SDM. Das Haltepunktereignis ist ein Stoppereignis, und die DE wartet erneut auf eine Benutzerantwort.
Wenn der Benutzer sich entscheidet, eine Funktion hineinzugehen, darüber zu springen oder sie zu verlassen, fordert die IDE die SDM auf, IDebugProgram2::Step aufzurufen. Die IDE übergibt dann die STEPUNIT (Instruktion, Anweisung oder Zeile) und den STEPKIND, also ob in die Funktion hineingegangen, darüber hinweggegangen oder aus ihr herausgegangen wird. Wenn der Schritt abgeschlossen ist, sendet die DE eine IDebugStepCompleteEvent2-Schnittstelle an das SDM, das ein Stoppereignis darstellt.
Wenn der Benutzer die Ausführung vom aktuellen Instruktionszeiger aus weiterführen möchte, fordert die IDE die SDM auf, IDebugProgram2::Execute aufzurufen. Das Programm setzt die Ausführung fort, bis die nächste Beendigungsbedingung auftritt.
Wenn das Debugpaket ein bestimmtes Stoppereignis ignoriert, ruft das Debugpaket die SDM auf, die IDebugProgram2::Continue aufruft. Wenn das Programm beim Auftreten der Beendigungsbedingung einen Schritt in eine Funktion hinein, darüber hinweg oder aus ihr heraus machte, wird der Schritt fortgesetzt. Dies bedeutet, dass das Programm einen Schrittweise-Ausführungszustand aufrechterhält, um zu wissen, wie es weitergeht.
Die Aufrufe von SDM an
Step, Execute und Continue sind asynchron, was bedeutet, dass der SDM erwartet, dass der Aufruf schnell zurückgegeben wird. Wenn die DE dem SDM ein Stoppereignis im selben Thread sendet, bevorStep, Execute oder Continue zurückkehrt, stellt das SDM die Reaktion ein.