次の方法で共有


DkmStepper クラス

定義

DkmStepper は、スレッドをステップ実行する要求を表します。 これは、ステップ実行に参加するさまざまなランタイム デバッグ モニター間の共有オブジェクトの有効期間を容易にします。

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
継承
継承
属性
実装

プロパティ

CodePath

[省略可能]StepKind が StepIntoSpecific の場合は、ステップインする呼び出しを指定します。 それ以外の場合は NULL です。

CrossThreadParent

[省略可能]OnCrossThreadStepArbitration を使用して新しいステッパーを作成すると、クロス スレッド ステップが失敗した場合やフォールバックする必要がある場合に、ステップ 実行マネージャーはこのフィールドを設定して元のステッパーに簡単に戻すことができます。 非推奨になりました。 代わりに GetCrossThreadParent を使用してください。

CurrentCodePaths

[省略可能]マネージド デバッグでは、現在のステップ範囲内のすべてのコード パスが含まれます。 それ以外の場合は NULL です。

この API は、Visual Studio 12 RTM (DkmApiVersion.VS12RTM) で導入されました。

CurrentMethodName

[省略可能]マネージド デバッグでは、現在のメソッド名が含まれています。 それ以外の場合は NULL です。

この API は、Visual Studio 12 RTM (DkmApiVersion.VS12RTM) で導入されました。

FrameBase

ステップの先頭にある最初のフレームのフレーム ベース。 StartingAddress が指定されていない場合、この値はMAXUINT64されます。

IsUnloaded

このオブジェクトに対して 'unloaded' イベントが発生した場合 (例: DkmThread::Unload が呼び出されます)、またはオブジェクトが閉じている場合は true を返します。 同期なしでこの状態を確認する場合は、読み取った後に返される状態が正確でなくなる可能性があるため、注意が必要です。

(継承元 DkmDataContainer)
ShouldCaptureReturnValue

マネージド デバッグでは、ステッパーがステップ実行中に戻り値をキャプチャするかどうかを示します。 既定値は false です。

この API は、Visual Studio 12 RTM (DkmApiVersion.VS12RTM) で導入されました。

SourceId

オブジェクトのソースを識別します。 SourceIds は、複数のコンポーネントがクラスのインスタンスを作成している可能性があるシナリオでフィルター処理を有効にするために使用されます。 たとえば、ソース ID を使用して、別のコンポーネントによって作成されるブレークポイント (ステップ実行に使用される内部ブレークポイントなど) ではなく、AD7 AL (ユーザー ブレークポイント、SDM レベルで表示されるその他のブレークポイントなど) からブレークポイントが取得されているかどうかを判断できます。

StartingAddress

[省略可能]このステップの開始時のプロセスの命令アドレス。 フレームのないスレッドでステップが発生した場合、これは NULL になります (スクリプト & マネージドのみ)。

StepKind

DkmStepKind では、Step メソッドが呼び出されたときにスレッドをステップ実行する方法について説明します。

StepUnit

DkmStepUnit は、Step メソッドが呼び出されたときのステップの細分性を表します。

Thread

DkmThread は、ターゲット プロセスで実行されているスレッドを表します。

UniqueId

この DkmStepper を一意に識別する Guid。

メソッド

BeforeEnable()

ステップ操作が実際に開始される前に停止イベント マネージャーによって呼び出されます。停止イベント マネージャーは、停止中のイベント マネージャーが関数評価のブロックを開始する前に必要な状態を設定できるように、すべてのランタイム インスタンスに通知します。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

CancelStepper(DkmRuntimeInstance)

制御するランタイム インスタンスによる作成後にステッパーを取り消すことができます。 呼び出し元のランタイム インスタンスは、現在制御しているランタイム インスタンスと一致している必要があります。 これは一般に、元のステッパーが再アクティブ化される可能性があるクロス スレッド ステップ実行シナリオで使用されます。 ステップ実行マネージャーはステッパを閉じ、ステップの完了を送信しません。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

Close()

ステッパー オブジェクトを閉じます。 これは、ステップ完了イベントが抑制されたときや、ステッパーが初期化に失敗した場合など、ステッパーが完了したときにコンポーネントによって閉じる必要があります。 ステッパーは、スレッドが終了するか、デバッガーが停止した場合に暗黙的に閉じられます。 別のユーザー レベルの実行要求が発行されると、ステップ マネージャーによって閉じられます。

DkmStepper オブジェクトは、関連付けられている DkmThread オブジェクトが閉じられると自動的に閉じられます。

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

DkmStepper オブジェクトは、ステップを発行するコンポーネントによって作成されます。 ユーザー レベルのステッパーは、AD7-AL によって作成されます。 ステッパー オブジェクトを初期化するには、Enable を呼び出す必要があります。 ステッパー オブジェクトは、ステップが完了するか、中止されるまで存続します。

この API は、Visual Studio 12 RTM (DkmApiVersion.VS12RTM) で導入されました。

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

DkmStepper オブジェクトは、ステップを発行するコンポーネントによって作成されます。 ユーザー レベルのステッパーは、AD7-AL によって作成されます。 ステッパー オブジェクトを初期化するには、Enable を呼び出す必要があります。 ステッパー オブジェクトは、ステップが完了するか、中止されるまで存続します。

Enable(Boolean)

次に実行が再開されたときにステップが実行されるように、ステッパー オブジェクトを初期化するために使用します。 このメソッドは、適切なランタイム デバッグ モニターを見つけ、このランタイム デバッグ モニターにステップのセットアップを依頼することで、ステップ マネージャーによって実装されます。 このメソッドは、特定のステッパー オブジェクトに対して 1 回だけ呼び出す必要があります。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

GetControllingRuntimeInstance()

この DkmStepper を現在制御しているランタイム インスタンスを返します。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

GetCrossThreadParent()

CrossThreadParent の代わりに を使用します。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

この API は、Visual Studio 16 Update 9 (DkmApiVersion.VS16Update9) で導入されました。

GetDataItem<T>()

このコンテナー インスタンスに追加された 'T' のインスタンスを取得します。 このコンテナーに 'T' が含まれていない場合、この関数は null を返します。

(継承元 DkmDataContainer)
IsExceptionInFlight()

ランタイム モニターがこの手順で例外が現在実行中であると判断したかどうかを示す DkmStepper のフラグを取得します。 これは、ランタイム モニターがステップ実行の動作を変更するために使用できます。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

この API は、Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) で導入されました。

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

別のスレッドでステップが続行されている場合にランタイム モニターによって呼び出されます。 ステップ 実行マネージャーは、新しいスレッドで使用される新しい DkmStepper を作成し、ステップアービトレーションを開始して、OnStepArbitration と同様に、どのランタイムがステップを完了する必要があるかどうかを判断します。 新しいステッパーは、元のステッパーと同じステップの種類とステップ ユニットを使用します。 新しい開始命令アドレスを指定する必要があり、ステッパーの開始アドレスとして設定されます。 元のステッパーは存続し、新しいステッパーが完了すると、ステッピング マネージャーはイベントを抑制し、完了を元のステッパーに通知します。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

OnReturnValues(ReadOnlyCollection<DkmRawReturnValue>, Boolean)

ReturnValues イベントを発生させます。 イベント シンク インターフェイスを実装するコンポーネントは、イベント通知を受け取ります。 すべてのコンポーネントが通知されると、制御が返されます。

OnStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance)

ランタイム モニターによって呼び出されるのは、ステップがランタイム モニターが認識する内容の制限を離れた場合、またはステップ中に別のランタイムへの移行が発生した可能性がある場合です。 ステップ 実行マネージャーは、各ランタイム モニターにプロセスを検査し、ステップを完了する必要があるランタイムを決定する機会を与えるために、ステップ実行の仲裁を開始します。 ランタイムは優先順位で呼び出されます。 このプロセスが完了すると、ステッピング マネージャーは、仲裁を要求したモニターで AfterSteppingArbitration を呼び出して、新しい制御モニターが見つかった場合は応答できるようにするか、見つからなかった場合は手順を完了します。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

OnStepComplete(DkmThread, Boolean)

StepComplete イベントを発生させます。 イベント シンク インターフェイスを実装するコンポーネントは、イベント通知を受け取ります。 このメソッドはイベントをエンキューし、コントロールはすぐに呼び出し元に戻ります。

RemoveDataItem<T>()

このコンテナーから 'T' のインスタンスを削除します。 通常、オブジェクトが閉じられるとデータ コンテナーが自動的に空になるので、このメソッドを呼び出す必要があります。

(継承元 DkmDataContainer)
SetDataItem<T>(DkmDataCreationDisposition, T)

データ コンテナーに新しい項目を配置します。

(継承元 DkmDataContainer)
SetExceptionInFlight(Boolean)

ランタイム モニターは、これを呼び出して、例外が進行中の場合にステップ実行の動作を変更するために協力するランタイムが使用できる DkmStepper のフラグを設定またはクリアします。 ステップ実行中に例外が発生したときに、ランタイム によって呼び出されます。

場所の制約: API は、Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

この API は、Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) で導入されました。

StepControlRequested(DkmStepArbitrationReason, DkmRuntimeInstance)

StepControlRequested は、制御されていないランタイム インスタンスがスレッドがランタイムへの遷移に達したことを検出すると呼び出されます。 ステップ マネージャーは、現在制御しているランタイム インスタンスに呼び出しを転送します。 現在制御しているランタイム インスタンスがステップ実行を停止できる場合は、Granted を true に設定する必要があります。 要求するランタイムが DkmStepper.TakeStepControl を呼び出すまで、実際の制御は指定されません。 この 2 つの部分のプロセスにより、呼び出し元は複数のステッパーの制御を同時に要求できます。

場所の制約: API は Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

TakeStepControl(Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

TakeStepControl は、制御されていないランタイム インスタンスが、スレッドがそのランタイムへの移行に達したことを検出したときに呼び出されます。 ステップ マネージャーは、現在制御しているランタイム インスタンスに呼び出しを転送します。 制御を要求するランタイム インスタンスは、まず、制御を必要とするすべてのステッパーで StepControlRequested を呼び出す必要があります。 すべて [許可] を true に設定した場合、ランタイム インスタンスは、制御する各ステッパでこのメソッドを呼び出す必要があります。

場所の制約: API は Monitor コンポーネント (コンポーネント レベル < 100,000) から呼び出す必要があります。

明示的なインターフェイスの実装

IDisposable.Dispose()

追加する。

適用対象