Freigeben über


Binden von Haltepunkten

Wenn die Benutzer legt einen Haltepunkt, etwa, indem sie die IDE, F9 drücken, dass die Debugsitzung und formuliert aufgefordert werden, den Haltepunkt zu erstellen.

Festlegen eines Haltepunktes

Festlegen eines Haltepunktes sind zwei Schritte, da der Code oder die Daten, die in den Haltepunkt betroffen sind, möglicherweise noch nicht verfügbar sind. Zuerst muss der Haltepunkt und anschließend beschrieben werden, während Code oder Daten verfügbar ist, muss er für diesen Code oder an Daten gebunden sind wie folgt:

  1. Der Haltepunkt wird von den relevanten Module Debuggen DES () angefordert, und dann wird der Haltepunkt in den Code oder an Daten gebunden, während er verfügbar ist.

  2. Der Haltepunkt wird die Anforderung an die Debugsitzung gesendet, die sie für alle relevanten DES sendet. Jedes DE beschließt, der den Haltepunkt zu behandeln, erstellt einen entsprechenden anstehenden Haltepunkt.

  3. Die Debugsitzung sammelt die ausstehenden Haltepunkte und sendet sie zurück zum Debuggen von der Komponente Paket (Visual Studio).

  4. Das Debuggen von Paket erfordert die Debugsitzung auf den ausstehenden Haltepunkt in den Code oder an Daten gebunden wird. Die Debugsitzung sendet diese Anforderung für alle relevanten DES.

  5. Wenn DE in der Lage ist, den Haltepunkt zu binden, sendet er ein gebundenes Ereignis des Haltepunkts an die Debugsitzung. Wenn dies nicht der Fall ist, sendet er ein Haltepunkt fehlerereignis.

Ausstehende Haltepunkte

Ein anstehender Haltepunkt kann auf mehrere Code speicherorten binden. Beispielsweise kann eine Zeile des Quellcodes für Vorlage zu jeder Code in C-Format C++-Compiler Zeichenfolge binden, die von der Vorlage generiert wird. Die Debugsitzung kann ein gebundenes Ereignis des Haltepunkts verwenden, um die Code kontexte aufzulisten, die an einem Haltepunkt gebunden sind, zu dem Zeitpunkt, als das Ereignis aufgetreten sind. Mehr Code kontexte können später gebunden werden. Daher sendet möglicherweise DE gebundenen Ereignisse des mehrere Haltepunkte für jede Anforderung von Bindungen. Es darf nur ein Haltepunkt DE fehlerereignis Bindungen pro Anforderung senden.

Implementierung

Programmgesteuert wird das Debuggen in der Sitzung Paket Debuggen Manager (SDM) und weist dieser eine IDebugBreakpointRequest2-Schnittstelle, die eine BP_REQUEST_INFORMATION Struktur, die den festzulegenden Haltepunkt beschreibt. Obwohl Haltepunkte aus mehreren Formularen sein können, lösen sie letztendlich zu einem Code oder einen Datenkontext auf.

Das SDM führt diesen Aufruf von allen relevanten DE, indem Sie seine IDebugEngine2::CreatePendingBreakpoint-Methode aufruft. Wenn DE beschließt, um den Haltepunkt zu behandeln, erstellt er eine IDebugPendingBreakpoint2-Schnittstelle und gibt diese zurück. Das SDM ruft diese Schnittstellen und übergibt sie an den Debug- als einzelne Paket IDebugPendingBreakpoint2-Schnittstelle.

Bisher sind keine Ereignisse generiert wurde.

Das Paket versucht anschließend, die den ausstehenden Haltepunkt in den Code oder die Daten binden, indem IDebugPendingBreakpoint2::Bindungaufrufen, der von DE implementiert wird.

Wenn der Haltepunkt gebunden ist, sendet IDebugBreakpointBoundEvent2-Ereignisschnittstelle um eine DE Debuggen auf Paket. Das Debuggen von Paket verwendet diese Schnittstelle, um alle Code kontexte (oder den einzelnen Datenkontext,) aufzulisten, die dem Haltepunkt gebunden werden, indem IDebugBreakpointBoundEvent2::EnumBoundBreakpointsaufruft, das eine oder mehrere IDebugBoundBreakpoint2-Schnittstellen zurückgibt. Die IDebugBoundBreakpoint2::GetBreakpointResolution-Schnittstelle gibt eine IDebugBreakpointResolution2-Schnittstelle zurück, und IDebugBreakpointResolution2::GetResolutionInfo gibt eine BP_RESOLUTION_INFORMATION Gesamtmenge zurück, die den Code oder den Datenkontext enthält.

Wenn DE nicht in der Lage ist, den Haltepunkt zu binden, sendet er eine einzelne IDebugBreakpointErrorEvent2-Ereignisschnittstelle zum Debuggen von Paket. Das Debuggen von Paket ruft den Fehlertyp (Fehler oder Warnung) und Informationsmeldung ab, indem IDebugBreakpointErrorEvent2::GetErrorBreakpointaufruft, gefolgt von IDebugErrorBreakpoint2::GetBreakpointResolution und IDebugErrorBreakpointResolution2::GetResolutionInfo. Dadurch wird eine BP_ERROR_RESOLUTION_INFORMATION Struktur zurück, die den Fehlertyp und die Nachricht enthält.

Wenn DE behandelt, einen Haltepunkt jedoch nicht gebunden werden kann, wird ein Fehler vom Typ BPET_TYPE_ERRORzurück. Das Debuggen von Paket reagiert, indem ein Fehlerdialogfeld angezeigt werden, und die IDE fügt ein Ausrufs Haltepunkt innerhalb des Symbols für das Symbol auf der linken Seite der Quellcodezeile.

Wenn DE einen Haltepunkt behandelt, kann es nicht gebunden werden, aber ein anderes DE bände kann es, eine Warnung zurückgibt. Die IDE reagiert, indem ein Fragen Haltepunkt innerhalb des Symbols für das Symbol auf der linken Seite der Quellcodezeile platziert.

Siehe auch

Konzepte

Debuggings-Aufgaben