Kontrolle der Ausführung
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
Das Load Complete-Ereignis, wenn das Programm, das bereits ausgeführt wird, angefügt wird
Beide Ereignisse werden beendet, d. h., die DE wartet auf eine Antwort des Benutzers mithilfe der IDE. 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 wird dann ausgeführt, bis eine Beendigungsbedingung auftritt, z. B. durch Drücken eines Haltepunkts. 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, eine Funktion zu durchlaufen, zu über oder aus einer Funktion herauszutreten, fordert die IDE die Debugsitzung auf, die Methode des
Step
Programms aufzurufen. Die IDE übergibt dann die Schritteinheit (Anweisung, Anweisung oder Zeile) und den Typ des Schritts (unabhängig davon, ob Sie die Funktion durchlaufen, über- oder außerhalb der Funktion ausführen möchten). 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 beim Auftreten der Beendigungsbedingung in eine Funktion über oder aus einer Funktion gelangt ist, wird der Schritt fortgesetzt.
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 sich der Benutzer entscheidet, eine Funktion zu durchlaufen, zu über oder aus einer Funktion herauszugehen, fordert die IDE die SDM auf, IDebugProgram2::Step aufzurufen. Die IDE übergibt dann die STEPUNIT (Anweisung, Anweisung oder Zeile) und DIE STEPKIND-Anweisung, d. h. schritt in die Funktion, über oder aus der Funktion heraus. Wenn der Schritt abgeschlossen ist, sendet die DE eine IDebugStepCompleteEvent2-Schnittstelle an das SDM, bei dem es sich um ein Stoppereignis handelt.
Wenn der Benutzer die Ausführung des aktuellen Anweisungspunkts fortsetzen 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 in eine Funktion über- oder außer Kraft trat, wird der Schritt fortgesetzt. Dies bedeutet, dass das Programm einen Schrittzustand Standard, damit es weiß, wie man 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 das SDM-Ereignis im selben Thread vorStep
, Execute oder Continue zurückgibt, sendet die SDM nicht mehr.