Sdílet prostřednictvím


Vytvoření vazby zarážek

Pokud uživatel nastaví zarážku, třeba stisknutím klávesy F9, integrované vývojové prostředí formuluje požadavek a vyzve ladicí relaci k vytvoření zarážky.

Nastavení zarážky

Nastavení zarážky je dvoustupňový proces, protože kód nebo data ovlivněná zarážkou ještě nemusí být k dispozici. Nejprve musí být zarážka popsána a jakmile bude kód nebo data k dispozici, musí být svázaná s tímto kódem nebo daty následujícím způsobem:

  1. Zarážka se vyžaduje z příslušných ladicích modulů (DE) a pak je zarážka svázaná s kódem nebo daty, jakmile bude dostupná.

  2. Požadavek na zarážku se odešle do ladicí relace, která ji odešle všem relevantním objektům DE. Všechny de, které se rozhodnou zpracovat zarážku, vytvoří odpovídající čekající zarážku.

  3. Relace ladění shromažďuje čekající zarážky a odesílá je zpět do balíčku ladění (ladicí komponenta sady Visual Studio).

  4. Ladicí balíček vyzve ladicí relaci k vytvoření vazby čekající zarážky na kód nebo data. Ladicí relace odešle tento požadavek všem relevantním objektům DE.

  5. Pokud de dokáže vytvořit vazbu zarážky, odešle událost vázané na zarážku zpět do ladicí relace. Pokud ne, odešle místo toho zarážku chybovou událost.

Čekající zarážky

Čekající zarážka se může svázat s více umístěními kódu. Například řádek zdrojového kódu pro šablonu jazyka C++ může svázat s každou sekvencí kódu vygenerovanou ze šablony. Ladicí relace může použít událost vázanou na zarážku k vytvoření výčtu kontextů kódu vázaných na zarážku v době odeslání události. Další kontexty kódu lze později svázat, takže de může odesílat více událostí svázaných bodů pro každý požadavek vazby. De by však měla posílat pouze jednu chybovou událost zarážky na každou žádost o vazbu.

Implementace

Ladicí balíček volá programově správce ladění relace (SDM) a dává mu rozhraní IDebugBreakpointRequest2 , které zabalí BP_REQUEST_INFO strukturu, která popisuje zarážku, která se má nastavit. I když zarážky můžou být z mnoha formulářů, nakonec se přeloží na kontext kódu nebo dat.

SDM toto volání předá každému relevantnímu DE voláním metody CreatePendingBreakpoint . Pokud se DE rozhodne zpracovat zarážku, vytvoří a vrátí IDebugPendingBreakpoint2 rozhraní. SDM shromažďuje tato rozhraní a předává je zpět do balíčku ladění jako jediné IDebugPendingBreakpoint2 rozhraní.

Zatím nebyly generovány žádné události.

Ladicí balíček se pak pokusí svázat čekající zarážku s kódem nebo daty voláním bind, který je implementován de.

Pokud je zarážka vázána, de odešle rozhraní události IDebugBreakpointBoundEvent2 do balíčku ladění. Ladicí balíček používá toto rozhraní k vytvoření výčtu všech kontextů kódu (nebo jednoho datového kontextu) vázaného na zarážku voláním EnumBoundBreakpoints, která vrací jedno nebo více rozhraní IDebugBoundBreakpoint2 . GetBreakpointResolution rozhraní vrátí IDebugBreakpointResolution2 rozhraní a GetResolutionInfo vrátí BP_RESOLUTION_INFO sjednocení obsahující kód nebo datový kontext.

Pokud de nemůže vytvořit vazbu zarážky, odešle do balíčku ladění jedno rozhraní událostí IDebugBreakpointErrorEvent2 . Ladicí balíček načte typ chyby (chyba nebo upozornění) a informační zprávu voláním GetErrorBreakpoint, následované GetBreakpointResolution a GetResolutionInfo. Vrátí BP_ERROR_RESOLUTION_INFO strukturu, která obsahuje typ chyby a zprávu.

Pokud de zpracovává zarážku, ale nemůže ji svázat, vrátí chybu typu BPET_TYPE_ERROR. Ladicí balíček reaguje zobrazením dialogového okna s chybou a integrované vývojové prostředí umístí vykřičník do zarážky glyph vlevo od řádku zdrojového kódu.

Pokud de zpracovává zarážku, nemůže ji svázat, ale některé jiné de ho můžou svázat, vrátí upozornění. Integrované vývojové prostředí (IDE) odpoví umístěním glyfu otázky do zarážky nalevo od řádku zdrojového kódu.