次の方法で共有


DkmThread クラス

定義

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

派生クラス: DkmGPUComputeThread、DkmVirtualThread

public ref class DkmThread : Microsoft::VisualStudio::Debugger::DkmDataContainer
[System.Runtime.InteropServices.Guid("ac420a23-b721-57c1-375d-a5053f90f94c")]
public class DkmThread : Microsoft.VisualStudio.Debugger.DkmDataContainer
[<System.Runtime.InteropServices.Guid("ac420a23-b721-57c1-375d-a5053f90f94c")>]
type DkmThread = class
    inherit DkmDataContainer
Public Class DkmThread
Inherits DkmDataContainer
継承
継承
派生
属性

プロパティ

Connection

これは、モニターと IDE の間の接続を表します。 モニターが IDE と同じプロセスで実行されている場合はローカル接続にすることも、リモート接続にすることもできます。 監視プロセスでは、接続は 1 つだけです。

IsMainThread

True の 場合は、このプロセスのメインスレッドです。 メイン スレッドは、最初に開始するスレッドです。

IsUnloaded

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

(継承元 DkmDataContainer)
NativeStartAddress

使用可能な場合は、このスレッドの Win32 開始アドレス (CreateThread API に渡される値) です。 値は常に使用できるわけではありません。たとえば、デバッガーがアタッチされた後、またはミニダンプでスレッドが開始されたシナリオでは一般に使用できません。

Process

DkmProcess は、デバッグ中のターゲット プロセスを表します。 デバッガーはプロセスをデバッグするため、これはデバッグの基本的な単位です。 DkmProcess は、システム プロセスまたはミニダンプなどの仮想プロセスを表すことができます。

SystemInformation

このスレッドが実行されているコンピューター システムに関する情報が含まれます。 このスレッドが WOW (64 ビット OS では 32 ビット エミュレーション) で実行されている場合、この情報は 64 ビット サブシステムではなく 32 ビット サブシステム用になります。

SystemPart

[省略可能]完全な Win32 スレッドに関連するスレッドの特性について説明します。 現在、この値は必須であり、すべてのスレッドに 'System' ブロックがあります。 今後、DkmThread が完全な Win32 スレッド以外のものを表している場合、この値は NULL になる可能性があります。

TebAddress

Win32 スレッド環境ブロックが格納されているターゲット プロセス内のアドレス。 詳細については、MSDN の TEB 構造に関するドキュメントを参照してください。

UniqueId

このスレッド オブジェクトを一意に識別する Guid。

メソッド

BeginFuncEvalExecution(DkmFuncEvalFlags)

このメソッドは、関数の評価が行われるようにターゲット プロセスを再開するために使用されます。 この関数は、ターゲット プロセスを実行するために関数評価を設定した後、ランタイム デバッグ モニターによって呼び出されます。 ランタイム モニターは、最初にスレッド コンテキストを更新し、ターゲット プロセスで必要なメモリを更新し、関数の評価が完了した検出を設定します。

このメソッドの呼び出し元は、関数の評価をトリガーした操作から戻る前に、常に EndFuncEvalExecution を呼び出す必要があります。 呼び出し元が失敗した場合、動作は未定義です。

このメソッドは、最初にターゲット プロセスを関数評価モード (DkmThread.OnBeginFuncEvalExecution) に更新してから、関数評価フラグで指定されたスレッドを中断または再開し、最後にターゲット プロセスを続行することによって、基本デバッグ モニターに実装されます。

このメソッドは任意のスレッドから呼び出すこともできますが、OnBeginFuncEvalExecution は停止中のイベント スレッドから呼び出す必要があるため、基本デバッグ モニターは、このメソッドの実装の一部としてスレッド 切り替えとして実行する必要があります。 ターゲットが再開されるまで、基本デバッグ モニターは BeginFuncEvalExecution から戻りません。

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution を呼び出して、プロセスの現在の状態で関数の評価が可能かどうかを理解できます。 たとえば、ベース DM が StoppingEventProcessingBegin を呼び出したが、StoppingEventProcessingContinue を呼び出していない場合、これは false を返します。

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

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

Create(DkmProcess, UInt64, UInt64, Boolean, DkmThread+System, DkmDataItem)

DkmThread は、新しい DkmThread インスタンスを作成するためにデバッグ モニターによって呼び出されます。 システム スレッドの DkmThread オブジェクトは、基本デバッグ モニターによって作成されます。 このメソッドは、イベント スレッドで呼び出す必要があります。

このメソッドは ThreadCreate イベントを送信します。

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

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

DkmUnwoundRegisters の配列を DkmUnwoundRegisters の並べ替えられた DkmReadOnlyCollection を含む DkmFrameRegisters のインスタンスに変換します。

CreateRegistersObject(Byte[], DkmUnwoundRegister[], DkmUnwoundRegister[])

Win32 CONTEXT 構造体を含む指定されたバイト配列から DkmFrameRegisters オブジェクトを作成します。

EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution は、関数評価モードを終了するために、イベント スレッドのランタイム デバッグ モニターによって呼び出されます。 EndFuncEvalExecution は、関数の評価が終了したことを示すために DkmProcess オブジェクトの内部状態を更新します。 これにより、FuncEvalEnded イベントも送信され、プロセスは停止済みとしてマークされます。

このメソッドは、(1) 'received' 停止イベント通知の処理中、または (2) スレッド終了などの非停止イベントの処理中、またはターゲットがまだ停止している間 (たとえば、関数評価のセットアップが失敗した場合) に呼び出される場合があります。

GetContext(Int32, Byte[])

スレッドの現在のコンテキスト (レジスタ値) を取得します。

GetContext(Int32, Void*, Int32)

スレッドの現在のコンテキスト (レジスタ値) を取得します。

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo は、スレッドの現在のコンテキストのフレーム ベースとリターン アドレスを取得するために使用されます。 これには、フレーム ポインターの省略と、現在の命令ポインターがプロローグ、エピローグなどにある場合が考慮されます。注: フレームにフレーム ポインターの省略があり、シンボルが読み込まれていない場合は、問題が発生することがあります。

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

GetCurrentFuncEvalMode()

GetCurrentFuncEvalMode は、関数の評価が有効になっているかどうかを判断するために、イベント処理の一部としてコンポーネントによって呼び出される場合があります。 この関数は、イベント処理の一部としてのみ呼び出されます。

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

スレッド ウィンドウに表示されるように、またはデバッグの場所ツール バーの [スレッド] ドロップダウンに表示されるスレッドの場所を提供します。

このメソッドは、指定した作業リストに新しい作業項目を追加し、作業項目が追加されると を返します。 作業項目の実際の処理は非同期です。 呼び出し元は、完了ルーチンを通じて要求が完了したことを通知されます。

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

GetCurrentRegisters(DkmUnwoundRegister[])

スレッドの現在のレジスタ値を含む DkmFrameRegisters オブジェクトを返します。

GetDataItem<T>()

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

(継承元 DkmDataContainer)
GetDebuggerSuspensionCount()

デバッガーによって発生した中断の合計数を返します (つまり、DkmThread::Resume を呼び出さずに DkmThread::Suspend を呼び出します)。 これにより、デバッガーの外部の中断が除外されます。

GetExtendedRegisters()

スレッド コンテキストから拡張レジスタを取得します。

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

マネージド スレッドのプロパティを取得します。

このメソッドは、指定した作業リストに新しい作業項目を追加し、作業項目が追加されると を返します。 作業項目の実際の処理は非同期です。 呼び出し元は、完了ルーチンを通じて要求が完了したことを通知されます。

GetManagedThreadProperties(Int32)

マネージド スレッドのプロパティを取得します。

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

ミニダンプに格納されているスレッド状態情報を取得します。

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

GetStackAddressRange()

指定されたスレッドのスタック制限/スタック ベースを取得します。 なお、この値は時間の経過とともに変化する可能性があることに注意してください。例えば、繊維の場合には。

GetSteppers()

GetSteppers は、この DkmThread オブジェクトの DkmStepper 要素を列挙します。

GetSuspensionCount(Boolean)

このスレッドの現在の中断数を返します。

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

このスレッドの現在の中断数を返します。

このメソッドは、指定した作業リストに新しい作業項目を追加し、作業項目が追加されると を返します。 作業項目の実際の処理は非同期です。 呼び出し元は、完了ルーチンを通じて要求が完了したことを通知されます。

GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo は、このスレッドの現在の IErrorInfo オブジェクトのアドレスを取得するために使用されます。

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

GetTlsValue(Int32)

指定した TLS インデックスのデバッグ対象スレッドのスレッド ローカル ストレージ (TLS) スロットの値を取得します。 プロセスの各スレッドには TLS インデックスごとに専用のスロットがあります。

GetTopStackFrame()

スレッドの最上位の呼び出し履歴フレームを返します。 この値は通常、最初のスタック ウォークの後にキャッシュされ、続行時にクリアされます。 これは、クライアント プロセスのスタック プロバイダーの上でのみ呼び出し可能です。 サーバー プロセスで最上位フレームを取得するには、GetTopStackWalkFrame を呼び出します。

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

GetTopStackWalkFrame(DkmRuntimeInstance)

スレッドの一番上のスタック フレームを返します。 このフレームは、ランタイム インスタンスまたはモニター アンワインダーから取得できます。 これは、サーバー プロセスからのみ呼び出すことができます。 クライアント プロセスでトップ フレームを取得するには、GetTopStackFrame を使用します。

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

GetVolatileFlags()

スレッドに関する揮発性フラグを取得します。 たとえば、スレッドがユーザー モードのスケジュールされたスレッドの場合は を返します。

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

スレッドに関する揮発性フラグを取得します。 たとえば、スレッドがユーザー モードのスケジュールされたスレッドの場合は を返します。

このメソッドは、指定した作業リストに新しい作業項目を追加し、作業項目が追加されると を返します。 作業項目の実際の処理は非同期です。 呼び出し元は、完了ルーチンを通じて要求が完了したことを通知されます。

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

スレッドの動的プロパティを取得します。

このメソッドは、指定した作業リストに新しい作業項目を追加し、作業項目が追加されると を返します。 作業項目の実際の処理は非同期です。 呼び出し元は、完了ルーチンを通じて要求が完了したことを通知されます。

GetVolatileProperties(Int32, UInt64)

スレッドの動的プロパティを取得します。

IsStoppingEventQueued(Boolean)

指定されたスレッドがキュー内に停止イベントを持っているかどうかを示します。 この情報は、スレッドがスリップする可能性があるかどうかを判断するために、実行マネージャーによって使用されます。

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution は、イベント スレッドの基本デバッグ モニターによって呼び出されます。 このメソッドは、関数評価のプロセスを再開するために呼び出される IDkmBaseFuncEvalService.BeginFuncEvalExecution の実装の一部として呼び出されます。 OnBeginFuncEvalExecution は、関数の評価が進行中であることを示すために DkmProcess オブジェクトの内部状態を更新します。 これにより、FuncEvalStarting イベントも送信され、プロセスが実行中としてマークされるため、停止したプロセスを必要とする操作は許可されません。

OnContinueExecution()

OnContinueExecution は、イベント スレッドの基本デバッグ モニターによって呼び出されます。 このメソッドは、ターゲット プロセスを続行するために IDE によって使用される IDkmContinueExecution.ContinueExecution の実装の一部として呼び出されます。 このメソッドは、以前に処理できなかった停止イベントをディスパッチするか、ターゲット プロセスが現在実行されていることを示すために DkmProcess オブジェクトの内部状態を更新するために、ディスパッチャーによって使用されます。 プロセスを実行中としてマークする前に、ディスパッチャーは Continue イベントを送信します。

基本デバッグ モニターは、このメソッド内にある間に再入可能に呼び出されることを想定する必要があります。

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

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

OnInterceptExceptionCompleted(UInt64)

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

OnThreadNameChange()

ThreadNameChange は、モニターによって DkmThread::NameChange が呼び出されたときにディスパッチャーによって送信されます。

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

RaiseExecutionControlException(UInt32)

IDkmSingleStepCompleteReceived または IDkmRuntimeBreakpointReceived 実装から呼び出され、実行の再開時にターゲット プロセスで EXCEPTION_BREAKPOINT または EXCEPTION_SINGLE_STEP例外がベース DM に強制的に発生するように API。 通常、ブレークポイントまたは単一ステップの例外は暗黙的に抑制されます。 これにより、ターゲット プロセス内の例外ハンドラーによってEXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEPを処理できます。 スレッドが現在ステップ完了イベントまたはブレークポイント イベントに座っていない場合、この API は失敗します。

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

RemoveDataItem<T>()

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

(継承元 DkmDataContainer)
Resume(Boolean)

このスレッドを再開します。

SetContext(Byte[])

スレッドのコンテキスト (レジスタ値) を更新します。

SetDataItem<T>(DkmDataCreationDisposition, T)

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

(継承元 DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

スレッドのコンテキストで拡張レジスタの値を設定します。

SetTlsValue(Int32, UInt64)

指定した TLS インデックスのデバッグ対象スレッドのスレッド ローカル ストレージ (TLS) スロットに値を格納します。 プロセスの各スレッドには TLS インデックスごとに専用のスロットがあります。

Suspend(Boolean)

このスレッドを中断します。

Unload(Int32)

ThreadExit は、モニターによって DkmThread::Unload が呼び出されたときにディスパッチャーによって送信されます。

このメソッドは、 オブジェクトを作成したコンポーネントによってのみ呼び出されます。

適用対象