Share via


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 相同的進程中執行,則它可以是本機連線,也可以是遠端連線。 在監視程式中,只有一個連線。

IsMainThread

如果這是這個進程的主要線程,則為 True。 主線程是要啟動的第一個線程。

IsUnloaded

如果已針對這個對象引發 'unloaded' 事件, (範例:DkmThread::Unload 呼叫) 或對象已關閉,則傳回 true。 請注意,檢查此狀態時,請務必小心,而不需同步處理,傳回的狀態在讀取之後可能無法再精確指示。

(繼承來源 DkmDataContainer)
NativeStartAddress

如果有的話,這是此線程的 Win32 開始位址, (傳遞至 CreateThread API) 的值。 例如,在附加調試程序之後啟動線程的案例中,通常無法使用此值,或是在迷你記憶體取中提供。

Process

DkmProcess 代表正在偵錯的目標進程。 調試程式會偵錯進程,因此這是偵錯的基本單元。 DkmProcess 可以代表系統進程或虛擬進程,例如minidumps。

SystemInformation

包含此線程執行所在的計算機系統相關信息。 如果此線程是在 64 位作業系統上的 WOW (32 位模擬下執行) ,則這項資訊會適用於 32 位子系統,而不是 64 位子系統。

SystemPart

[選擇性]描述與完整 Win32 線程相關的線程特性。 目前,這個值是必要的,而且所有線程都會有 「系統」區塊。 未來,如果 DkmThread 代表完整 Win32 線程以外的專案,這個值可能是 NULL。

TebAddress

目標進程內的位址,其中儲存 Win32 線程環境區塊。 如需詳細資訊,請參閱 MSDN 中 TEB 結構的檔。

UniqueId

可唯一識別此線程物件的 Guid。

方法

BeginFuncEvalExecution(DkmFuncEvalFlags)

這個方法可用來繼續目標進程,以便進行函式評估。 在運行時間偵錯監視器設定函式評估之後,會呼叫此函式,以便執行目標進程。 運行時間監視器會先更新線程內容、更新目標進程中的任何必要記憶體,以及設定函式評估完成的任何偵測。

此方法的呼叫端必須先呼叫 EndFuncEvalExecution,再從觸發函式評估的作業傳回。 如果呼叫端無法這麼做,則行為是未定義的。

此方法會在基底偵錯監視器中實作,方法是先將目標進程更新為函式評估模式, (DkmThread.OnBeginFuncEvalExecution) ,然後暫停和/或繼續函式評估旗標所指定的線程,最後繼續目標進程。

此方法可以從任何線程呼叫,不過 OnBeginFuncEvalExecution 必須從停止的事件線程呼叫,因此基底偵錯監視器可能需要在實作此方法時以線程參數的形式執行。 在目標繼續之後,基底偵錯監視器不應該從 BeginFuncEvalExecution 傳回。

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution 可以呼叫,以了解進程的目前狀態是否允許函式評估。 例如,如果基底 DM 呼叫 StoppingEventProcessingBegin,但不會呼叫 StoppingEventProcessingContinue,這會傳回 false。

位置條件約束:必須從監視元件呼叫 API, (元件層級 < 100,000) 。

此 API 是在 Visual Studio 16 Update 5 (DkmApiVersion.VS16Update5) 中引進。

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

偵錯監視器會呼叫 DkmThread,以建立新的 DkmThread 實例。 系統線程的 DkmThread 物件是由基底偵錯監視器所建立。 這個方法必須在事件線程上呼叫。

這個方法會傳送 ThreadCreate 事件。

位置條件約束:必須從監視元件呼叫 API, (元件層級 < 100,000) 。

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

將 DkmUnwoundRegisters 的陣列轉換成 DkmFrameRegisters 的實例,其中包含 DkmUnwoundRegisters 的已排序 DkmReadOnlyCollection。

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

從包含 Win32 CONTEXT 結構的提供的位元組陣列建立 DkmFrameRegisters 物件。

EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution 是由事件線程上的運行時間偵錯監視器呼叫,以結束函式評估模式。 EndFuncEvalExecution 會更新 DkmProcess 對象的內部狀態,以指出函式評估已結束。 這也會傳送 FuncEvalEnded 事件,並將進程標示為已停止。

當處理「已接收」停止事件通知時,這個方法可能會呼叫 (1) ;或者,處理非停止事件時 (2) ,例如線程結束、-或- (3) ,例如,如果函式評估設定失敗。

GetContext(Int32, Byte[])

取得線程) 的目前內容 (緩存器值。

GetContext(Int32, Void*, Int32)

取得線程) 的目前內容 (緩存器值。

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo 可用來取得線程目前內容的框架基底和傳回位址。 這會將框架指標省略納入考慮,以及目前的指令指標是否位於初構、結尾等...注意:在某些情況下,如果框架有框架指標省略,而且沒有載入符號,就會發生錯誤。

位置條件約束:必須從監視元件呼叫 API, (元件層級 < 100,000) 。

GetCurrentFuncEvalMode()

GetCurrentFuncEvalMode 可由元件呼叫為事件處理的一部分,以判斷是否啟用函式評估。 此函式只能呼叫為事件處理的一部分。

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

提供線程的位置,如線程視窗中可見,或偵錯位置工具列中的線程下拉式清單。

這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。

位置條件約束:必須從 IDE 元件呼叫 API, (元件層級 > 100,000) 。

GetCurrentRegisters(DkmUnwoundRegister[])

會傳回包含線程目前緩存器值的 DkmFrameRegisters 物件。

GetDataItem<T>()

取得已新增至這個容器實例的 『T』 實例。 如果此容器不包含 『T』,此函式會傳回 null。

(繼承來源 DkmDataContainer)
GetDebuggerSuspensionCount()

傳回調試程式 (所造成的暫停總數,也就是呼叫 DkmThread::Suspend 而不呼叫 DkmThread::Resume) 。 這會排除調試程式外部的任何暫停。

GetExtendedRegisters()

從線程內容取得擴充緩存器。

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

取得 Managed 線程的屬性。

這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。

GetManagedThreadProperties(Int32)

取得 Managed 線程的屬性。

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

取得儲存在Minidump中的線程狀態資訊。

此 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。

位置條件約束:必須從 IDE 元件呼叫 API, (元件層級 > 100,000) 。

GetTopStackWalkFrame(DkmRuntimeInstance)

傳回線程的最上層堆疊框架。 此框架可能來自運行時間實例或監視器回溯器。 這隻能從伺服器進程呼叫。 若要取得用戶端程式中的最上層框架,請使用 GetTopStackFrame。

位置條件約束:必須從監視元件呼叫 API, (元件層級 < 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 是由事件線程上的基底偵錯監視器所呼叫。 這個方法會在實作 IDkmContinueExecution.ContinueExecution 中呼叫,這是 IDE 用來繼續目標程式的一部分。 發送器會使用此方法來分派先前無法處理的停止事件,或更新 DkmProcess 物件的內部狀態,以指出目標進程目前正在執行。 將進程標示為執行之前,發送器會傳送Continue事件。

基底偵錯監視器應該會在此方法中時重新進入呼叫。

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

引發 EmbeddedBreakpointHit 事件。 實作事件接收介面的元件將會收到事件通知。 這個方法會加入事件佇列,而控件會立即返回呼叫端。

OnInterceptExceptionCompleted(UInt64)

引發 InterceptExceptionCompleted 事件。 實作事件接收介面的元件將會收到事件通知。 這個方法會加入事件佇列,而控件會立即返回呼叫端。

OnThreadNameChange()

當監視器叫用 DkmThread::NameChange 時,發送器會傳送 ThreadNameChange。

此 API 是在 Visual Studio 14 RTM (DkmApiVersion.VS14RTM) 中引進。

RaiseExecutionControlException(UInt32)

可從 IDkmSingleStepCompleteReceived 或 IDkmRuntimeBreakpointReceived 實作呼叫的 API,強制基底 DM 在目標進程中引發執行時EXCEPTION_BREAKPOINT或EXCEPTION_SINGLE_STEP例外狀況。 一般而言,會隱含隱藏斷點或單一步驟例外狀況。 這可讓目標進程內的例外狀況處理程式處理EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP。 如果線程目前不在步驟完成或斷點事件中,此 API 將會失敗。

位置條件約束:必須從監視元件呼叫 API, (元件層級 < 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)

當監視器叫用 DkmThread::Unload 時,發送器會傳送 ThreadExit。

這個方法只能由建立 物件的元件呼叫。

適用於