Sdílet prostřednictvím


DkmStepper Třída

Definice

DkmStepper představuje požadavek na krok vlákna. Usnadňuje sdílenou životnost objektů mezi různými monitorováními ladění modulu runtime, které se účastní krokování.

public ref class DkmStepper : Microsoft::VisualStudio::Debugger::DkmDataContainer, IDisposable
[System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")]
public class DkmStepper : Microsoft.VisualStudio.Debugger.DkmDataContainer, IDisposable
[<System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")>]
type DkmStepper = class
    inherit DkmDataContainer
    interface IDisposable
Public Class DkmStepper
Inherits DkmDataContainer
Implements IDisposable
Dědičnost
Dědičnost
Atributy
Implementuje

Vlastnosti

CodePath

[Volitelné] Pokud je StepKind StepIntoSpecific, určuje, do kterého volání se chystáme. V opačném případě má hodnotu NULL.

CrossThreadParent

[Volitelné] Pokud je nový krokper vytvořen pomocí OnCrossThreadStepArbitration, správce krokování nastaví toto pole, aby se v případě, že krok mezi vlákny selže nebo potřebuje vrátit zpět k původnímu krokovacímu kroku, bude snadné. Zastaralé Místo toho použijte GetCrossThreadParent.

CurrentCodePaths

[Volitelné] Ve spravovaném ladění obsahuje všechny cesty kódu v aktuálním rozsahu kroků. V opačném případě má hodnotu NULL.

Toto rozhraní API bylo zavedeno v sadě Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

CurrentMethodName

[Volitelné] Ve spravovaném ladění obsahuje aktuální název metody. V opačném případě má hodnotu NULL.

Toto rozhraní API bylo zavedeno v sadě Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

FrameBase

Základ prvního snímku na začátku kroku. Tato hodnota bude MAXUINT64, pokud nebyla zadána počáteční adresa.

IsUnloaded

Vrátí hodnotu true, pokud byla pro tento objekt vyvolána událost unloaded (příklad: DkmThread::Unload je volána) nebo pokud byl objekt uzavřen. Mějte na paměti, že při kontrole tohoto stavu je potřeba střídmět, protože bez synchronizace nemusí být vrácený stav po přečtení přesný.

(Zděděno od DkmDataContainer)
ShouldCaptureReturnValue

Ve spravovaném ladění označuje, jestli krokovač chtěl během krokování zachytit návratnou hodnotu. Výchozí hodnota je false.

Toto rozhraní API bylo zavedeno v sadě Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

SourceId

Identifikuje zdroj objektu. SourceId se používají k povolení filtrování ve scénářích, kdy více komponent může vytvářet instance třídy. Id zdroje je například možné použít k určení, jestli zarážka pochází z al AD7 (např. uživatelská zarážka nebo jiná zarážka viditelná na úrovni SDM) namísto zarážky, kterou může vytvořit jiná komponenta (například interní zarážka používaná pro krokování).

StartingAddress

[Volitelné] Adresa instrukce procesu v době, kdy tento krok začal. Tato hodnota bude null, pokud krok pochází z vlákna bez rámců (skript & pouze spravované).

StepKind

DkmStepKind popisuje, jak krokovat vlákno při zavolání metody Step.

StepUnit

DkmStepUnit popisuje členitost kroku při zavolání metody Step.

Thread

DkmThread představuje vlákno spuštěné v cílovém procesu.

UniqueId

Identifikátor GUID, který jednoznačně identifikuje tento DkmStepper.

Metody

BeforeEnable()

Volá zastavující správce událostí před zahájením operace kroku. Zastavující správce událostí upozorní všechny instance modulu runtime, aby mohly nastavit potřebný stav před tím, než zastavující správce událostí začne blokovat vyhodnocení funkcí.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

CancelStepper(DkmRuntimeInstance)

Umožňuje zrušit krokovač po vytvoření řídicí instancí modulu runtime. Volající instance modulu runtime musí odpovídat aktuální řídicí instanci modulu runtime. To se obvykle používá ve scénářích krokování mezi vlákny, kde může být původní krokovač znovu aktivován. Správce krokování krokovač zavře a neodešle krok dokončený.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

Close()

Zavře krokper objekt. Tato možnost by měla být uzavřena komponentami, když je krokper hotový, například když je potlačena událost dokončení kroku nebo pokud se krokovač nepodaří inicializovat. Stepry budou implicitně uzavřeny, pokud se jejich vlákno ukončí nebo je zastaven ladicí program. Pokud se vydá jiný požadavek na spuštění na úrovni uživatele, manažer krokování je zavře.

Objekty DkmStepper se automaticky zavřou při zavření přidruženého objektu DkmThread.

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, Boolean, ReadOnlyCollection<DkmSteppingCodePath>, String, DkmDataItem)

Objekty DkmStepper jsou vytvořeny komponentami, které chtějí vydat krok. Stepry na úrovni uživatele jsou vytvořeny pomocí AD7-AL. Chcete-li inicializovat objekt krokper, musí být volána funkce Enable. Objekty krokperu budou živé, dokud se krok neskončí nebo se přeruší.

Toto rozhraní API bylo zavedeno v sadě Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, DkmDataItem)

Objekty DkmStepper jsou vytvořeny komponentami, které chtějí vydat krok. Stepry na úrovni uživatele jsou vytvořeny pomocí AD7-AL. Chcete-li inicializovat objekt krokper, musí být volána funkce Enable. Objekty krokperu budou živé, dokud se krok neskončí nebo se přeruší.

Enable(Boolean)

Slouží k inicializaci objektu krokper, aby se krok provedl při dalším pokračování provádění. Tuto metodu implementuje krokovací manažer tak, že najde vhodné monitorování ladění modulu runtime a požádá ho o nastavení kroku. Tato metoda by měla být volána pouze jednou pro daný krokper objekt.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

GetControllingRuntimeInstance()

Vrátí instanci modulu runtime, která je aktuálně pod kontrolou tohoto DkmStepperu.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

GetCrossThreadParent()

Použijte místo CrossThreadParent.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

Toto rozhraní API bylo zavedeno v sadě Visual Studio 16 Update 9 (DkmApiVersion.VS16Update9).

GetDataItem<T>()

Získá instanci T, která byla přidána do této instance kontejneru. Pokud tento kontejner neobsahuje "T", vrátí tato funkce hodnotu null.

(Zděděno od DkmDataContainer)
IsExceptionInFlight()

Získá příznak na DkmStepper, který uvádí, pokud monitorování modulu runtime věří, že výjimka je právě spuštěna během tohoto kroku. To může být použito monitorováním modulu runtime ke změně chování krokování.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

Toto rozhraní API bylo zavedeno v sadě Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1).

OnCrossThreadStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance, DkmThread, DkmInstructionAddress, DkmStepper)

Volá se monitorováním modulu runtime, když krok pokračuje v jiném vlákně. Správce krokování vytvoří nový krok DkmStepper, který se použije v novém vlákně, a zahájí arbitráž krokování, aby určil, který modul runtime by měl tento krok dokončit stejně jako OnStepArbitration. Nový krokper používá stejný druh kroku a jednotku kroku jako původní krokovač. Musí být uvedena nová počáteční adresa instrukce, která se nastaví jako počáteční adresa krokovače. Původní krokper zůstane naživu, a když se nový krokper dokončí, správce krokování událost potlačí a upozorní původního krokovače na dokončení.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

OnReturnValues(ReadOnlyCollection<DkmRawReturnValue>, Boolean)

Vytvořte událost ReturnValues. Komponenty, které implementují rozhraní jímky událostí, obdrží oznámení o události. Ovládací prvek se vrátí, jakmile budou všechny komponenty upozorněny.

OnStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance)

Volá se monitorováním modulu runtime, když určitý krok opustil hranice toho, čemu monitorování modulu runtime rozumí, nebo když během kroku došlo k potenciálnímu přechodu na jiný modul runtime. Krokovací manažer zahájí krokovací rozhodčí řízení, aby každému monitorování modulu runtime dal možnost zkontrolovat proces a určit, který modul runtime by měl krok dokončit. Moduly runtime se volají v pořadí podle priority. Po dokončení tohoto procesu bude správce krokování volat AfterSteppingArbitration na monitorování, které požadovalo rozhodčí řízení, aby mohl reagovat na nové řídicí monitorování, pokud byl nalezen, nebo dokončit krok, pokud nebyl nalezen.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

OnStepComplete(DkmThread, Boolean)

Vytvořte událost StepComplete. Komponenty, které implementují rozhraní jímky událostí, obdrží oznámení o události. Tato metoda zařadí událost do fronty a ovládací prvek se okamžitě vrátí volajícímu.

RemoveDataItem<T>()

Odeberte z tohoto kontejneru instanci T. Obvykle není nutné volat tuto metodu, protože kontejner dat se automaticky vyprázdní při zavření objektu.

(Zděděno od DkmDataContainer)
SetDataItem<T>(DkmDataCreationDisposition, T)

Do kontejneru dat umístěte novou položku.

(Zděděno od DkmDataContainer)
SetExceptionInFlight(Boolean)

Monitorování modulu runtime toto voláním nastaví nebo vymaže příznak na DkmStepperu, který může být použit spolupracujícími moduly runtime ke změně chování krokování, pokud je výjimka aktuální v běhu. Volá se monitorováním modulu runtime, když při krokování dojde k výjimce.

Omezení umístění: Rozhraní API se musí volat z komponenty monitoru (úroveň < komponenty 100 000).

Toto rozhraní API bylo zavedeno v sadě Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1).

StepControlRequested(DkmStepArbitrationReason, DkmRuntimeInstance)

StepControlRequested je volána, když neřízující instance modulu runtime zjistí, že vlákno narazí na přechod do svého modulu runtime. Krokovací manažer přesměruje volání na aktuální řídicí instanci modulu runtime. Pokud aktuální řídicí instance modulu runtime může krokování zastavit, měla by být nastavena na hodnotu Uděleno na true. Skutečné řízení není uděleno, dokud žádající modul runtime nevolá DkmStepper.TakeStepControl. Tento dvoudílný proces umožňuje volajícím požádat o řízení více stepí najednou.

Omezení umístění: Rozhraní API se musí volat z komponenty Monitor (úroveň < komponenty 100 000).

TakeStepControl(Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

TakeStepControl je volána, když neřízující instance modulu runtime zjistí, že vlákno došlo k přechodu do svého modulu runtime. Krokovací manažer přesměruje volání na aktuální řídicí instanci modulu runtime. Instance modulu runtime, která požaduje řízení, by měla nejprve volat StepControlRequested na všech stepech, které chce ovládat. Pokud jsou všechny nastaveny na Hodnotu Uděleno na true, instance modulu runtime by pak měla volat tuto metodu pro každý krokper, který převezme kontrolu nad.

Omezení umístění: Rozhraní API se musí volat z komponenty Monitor (úroveň < komponenty 100 000).

Explicitní implementace rozhraní

IDisposable.Dispose()

Chcete-li přidat.

Platí pro