DkmVirtualThread 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
DkmVirtualThread 代表未實際存在於偵錯進程中的線程。
此 API 是在 Visual Studio 16 Update 2 (DkmApiVersion.VS16Update2) 引進。
public ref class DkmVirtualThread : Microsoft::VisualStudio::Debugger::DkmThread
[System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")]
public class DkmVirtualThread : Microsoft.VisualStudio.Debugger.DkmThread
[<System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")>]
type DkmVirtualThread = class
inherit DkmThread
Public Class DkmVirtualThread
Inherits DkmThread
- 繼承
- 繼承
- 屬性
屬性
Connection |
這代表監視器與 IDE 之間的連線。 如果監視器在與 IDE 相同的進程中執行,則它可以是本機連線,也可以是遠端連線。 在監視程式中,只有一個連線。 (繼承來源 DkmThread) |
IsMainThread |
如果這是這個進程的主要線程,則為 True。 主線程是要啟動的第一個線程。 (繼承來源 DkmThread) |
IsUnloaded |
如果已針對這個對象引發 'unloaded' 事件,則傳回 true (範例:DkmThread::Unload 會呼叫) 或物件已關閉。 請注意,檢查此狀態時必須小心,而不進行同步處理,傳回的狀態在讀取之後可能無法再精確指示。 (繼承來源 DkmDataContainer) |
NativeStartAddress |
如果有的話,這是此線程的 Win32 開始位址, (傳遞至 CreateThread API) 的值。 例如,在附加調試程序之後啟動線程的案例中,通常無法使用此值,或是在迷你記憶體取中提供。 (繼承來源 DkmThread) |
Process |
DkmProcess 代表正在偵錯的目標進程。 調試程式會偵錯進程,因此這是偵錯的基本單元。 DkmProcess 可以代表系統進程或虛擬進程,例如minidumps。 (繼承來源 DkmThread) |
SystemInformation |
包含此線程執行所在的計算機系統相關信息。 如果此線程是在 64 位作業系統上的 WOW (32 位模擬下執行) ,則這項資訊會適用於 32 位子系統,而不是 64 位子系統。 (繼承來源 DkmThread) |
SystemPart |
[選擇性]描述與完整 Win32 線程相關的線程特性。 目前,這個值是必要的,而且所有線程都會有 「系統」區塊。 未來,如果 DkmThread 代表完整 Win32 線程以外的專案,這個值可能是 NULL。 (繼承來源 DkmThread) |
TebAddress |
目標進程內的位址,其中儲存 Win32 線程環境區塊。 如需詳細資訊,請參閱 MSDN 中 TEB 結構的檔。 (繼承來源 DkmThread) |
UniqueId |
可唯一識別此線程物件的 Guid。 (繼承來源 DkmThread) |
方法
BeginFuncEvalExecution(DkmFuncEvalFlags) |
這個方法可用來繼續目標進程,以便進行函式評估。 在運行時間偵錯監視器設定函式評估,以便執行目標進程之後,就會呼叫此函式。 運行時間監視器會先更新線程內容、更新目標進程中的任何必要記憶體,以及設定函式評估已完成的任何偵測。 此方法的呼叫端必須一律呼叫 EndFuncEvalExecution,再從觸發函式評估的作業傳回。 如果呼叫端無法這麼做,則行為未定義。 此方法會在基底偵錯監視器中實作,方法是先將目標進程更新為在函式評估模式中, (DkmThread.OnBeginFuncEvalExecution) ,然後暫停和/或繼續線程,如函式評估旗標所指定,最後繼續目標進程。 此方法可以從任何線程呼叫,不過 OnBeginFuncEvalExecution 必須從停止事件線程呼叫,因此基底偵錯監視器可能需要在實作此方法時執行線程參數。 在目標繼續之後,基底偵錯監視器不應該從 BeginFuncEvalExecution 傳回。 (繼承來源 DkmThread) |
CanBeginFuncEvalExecution(DkmFuncEvalFlags) |
CanBeginFuncEvalExecution 可以呼叫,以了解進程的目前狀態是否允許函式評估。 例如,如果基底 DM 已呼叫 StoppingEventProcessingBegin,但不會讓 StoppingEventProcessingContinue 傳回 false。 位置條件約束:必須從監視器元件 (元件層級 < 100,000) 呼叫 API。 此 API 是在 Visual Studio 16 Update 5 (DkmApiVersion.VS16Update5) 中引進。 (繼承來源 DkmThread) |
Create(DkmProcess, DkmThread+System, DkmDataItem) |
Create 新的 DkmVirtualThread 物件實例。 位置條件約束:必須從監視元件呼叫 API, (元件層級 < 100,000) 。 此 API 是在 Visual Studio 16 Update 2 (DkmApiVersion.VS16Update2) 引進。 |
CreateFrameRegisters(DkmUnwoundRegister[], UInt32) |
將 DkmUnwoundRegisters 的陣列轉換成 DkmFrameRegisters 的實例,其中包含 DkmUnwoundRegisters 的已排序 DkmReadOnlyCollection。 (繼承來源 DkmThread) |
CreateRegistersObject(Byte[], DkmUnwoundRegister[], DkmUnwoundRegister[]) |
從包含 Win32 CONTEXT 結構的提供的位元組陣列建立 DkmFrameRegisters 物件。 (繼承來源 DkmThread) |
EndFuncEvalExecution(DkmFuncEvalFlags) |
EndFuncEvalExecution 是由事件線程上的運行時間偵錯監視器呼叫,以結束函式評估模式。 EndFuncEvalExecution 會更新 DkmProcess 對象的內部狀態,以指出函式評估已結束。 這也會傳送 FuncEvalEnded 事件,並將進程標示為已停止。 在處理「已接收」停止事件通知時,可能會呼叫這個方法 (1) ,或在處理線程結束、-或- (3) 等非停止事件時, (2) ,例如,如果函式評估設定失敗。 (繼承來源 DkmThread) |
GetContext(Int32, Byte[]) |
取得線程) 的目前內容 (緩存器值。 (繼承來源 DkmThread) |
GetContext(Int32, Void*, Int32) |
取得線程) 的目前內容 (緩存器值。 (繼承來源 DkmThread) |
GetCurrentFrameInfo(UInt64, UInt64, UInt64) |
GetCurrentFrameInfo 可用來取得線程目前內容的框架基底和傳回位址。 這會將框架指標省略納入考慮,如果目前的指令指標位於初構、結尾等...注意:在某些情況下,如果框架有框架指標省略,而且沒有載入符號,就會發生錯誤。 位置條件約束:必須從監視器元件 (元件層級 < 100,000) 呼叫 API。 (繼承來源 DkmThread) |
GetCurrentFuncEvalMode() |
GetCurrentFuncEvalMode 可由元件呼叫為事件處理的一部分,以判斷是否啟用函式評估。 此函式只能呼叫作為事件處理的一部分。 (繼承來源 DkmThread) |
GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>) |
提供線程的位置,如線程視窗中可見,或偵錯位置工具列中的線程下拉式清單。 這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回 。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。 位置條件約束:必須從 IDE 元件呼叫 API, (元件層級 > 100,000) 。 (繼承來源 DkmThread) |
GetCurrentRegisters(DkmUnwoundRegister[]) |
會傳回包含線程目前緩存器值的 DkmFrameRegisters 物件。 (繼承來源 DkmThread) |
GetDataItem<T>() |
取得已新增至這個容器實例的 『T』 實例。 如果此容器不包含 『T』,此函式會傳回 null。 (繼承來源 DkmDataContainer) |
GetDebuggerSuspensionCount() |
傳回調試程式 (所造成的暫停總數,也就是呼叫 DkmThread::Suspend 而不呼叫 DkmThread::Resume) 。 這會排除調試程式外部的任何暫停。 (繼承來源 DkmThread) |
GetExtendedRegisters() |
從線程內容取得擴充緩存器。 (繼承來源 DkmThread) |
GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>) |
取得受控線程的屬性。 這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回 。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。 (繼承來源 DkmThread) |
GetManagedThreadProperties(Int32) |
取得受控線程的屬性。 (繼承來源 DkmThread) |
GetMinidumpThreadInfo(DkmMinidumpThreadInfo) |
取得儲存在Minidump中的線程狀態資訊。 此 API 是在 Visual Studio 17 RTM (DkmApiVersion.VS17RTM) 中引進。 (繼承來源 DkmThread) |
GetStackAddressRange() |
擷取指定線程的堆疊限制/堆棧基底。 請注意,此值可能會隨著時間變更,例如,在光纖的情況下。 (繼承來源 DkmThread) |
GetSteppers() |
GetSteppers 會列舉這個 DkmThread 物件的 DkmStepper 元素。 (繼承來源 DkmThread) |
GetSuspensionCount(Boolean) |
傳回此線程目前的暫停計數。 (繼承來源 DkmThread) |
GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>) |
傳回此線程目前的暫停計數。 這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回 。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。 (繼承來源 DkmThread) |
GetThreadCurrentWinRtErrorInfo() |
GetThreadCurrentWinRtErrorInfo 可用來取得此線程目前 IErrorInfo 物件的位址。 此 API 是在 Visual Studio 12 RTM (DkmApiVersion.VS12RTM) 引进。 (繼承來源 DkmThread) |
GetTlsValue(Int32) |
針對指定的 TLS 索引,擷取偵錯線程的線程本機記憶體 (TLS) 位置中的值。 處理序的每個執行緒都有自己專用於每個 TLS 索引的位置。 (繼承來源 DkmThread) |
GetTopStackFrame() |
傳回線程的上層呼叫堆疊框架。 此值通常會在第一個堆疊逐步解說之後快取,並在繼續時清除。 這隻能在客戶端進程中的堆疊提供者上方呼叫。 若要在伺服器進程中取得頂端框架,請呼叫 GetTopStackWalkFrame。 位置條件約束:必須從 IDE 元件呼叫 API, (元件層級 > 100,000) 。 (繼承來源 DkmThread) |
GetTopStackWalkFrame(DkmRuntimeInstance) |
傳回線程的上層堆疊框架。 此框架可能來自運行時間實例或監視器回溯器。 這隻能從伺服器進程呼叫。 若要在用戶端程式中取得頂端框架,請使用 GetTopStackFrame。 位置條件約束:必須從監視器元件 (元件層級 < 100,000) 呼叫 API。 (繼承來源 DkmThread) |
GetVolatileFlags() |
取得有關線程的變動性旗標。 例如,如果線程是使用者模式排程線程,則傳回 。 (繼承來源 DkmThread) |
GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>) |
取得有關線程的變動性旗標。 例如,如果線程是使用者模式排程線程,則傳回 。 這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回 。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。 (繼承來源 DkmThread) |
GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>) |
取得線程的動態屬性。 這個方法會將新的工作專案附加至指定的工作清單,並在附加工作項目之後傳回。 工作項目的實際處理是異步的。 呼叫端將會透過完成例程收到要求完成的通知。 (繼承來源 DkmThread) |
GetVolatileProperties(Int32, UInt64) |
取得線程的動態屬性。 (繼承來源 DkmThread) |
IsStoppingEventQueued(Boolean) |
指出指定的線程在佇列中是否有停止事件。 執行管理員會使用這項資訊來決定線程是否可能遭到名單。 (繼承來源 DkmThread) |
OnBeginFuncEvalExecution(DkmFuncEvalFlags) |
OnBeginFuncEvalExecution 是由事件線程上的基底偵錯監視器所呼叫。 這個方法會呼叫為實作 IDkmBaseFuncEvalService.BeginFuncEvalExecution 的一部分,這是為了繼續函式評估的程式所呼叫。 OnBeginFuncEvalExecution 會更新 DkmProcess 對象的內部狀態,以指出函式評估正在進行中。 這也會傳送 FuncEvalStarting 事件,並將進程標示為執行中,因此不允許任何需要已停止進程的作業。 (繼承來源 DkmThread) |
OnContinueExecution() |
OnContinueExecution 是由事件線程上的基底偵錯監視器所呼叫。 這個方法會在實作 IDkmContinueExecution.ContinueExecution 中呼叫,這是 IDE 用來繼續目標程式的一部分。 發送器會使用此方法來分派先前無法處理的停止事件,或更新 DkmProcess 物件的內部狀態,以指出目標進程目前正在執行。 將進程標示為執行之前,發送器會傳送Continue事件。 基底偵錯監視器應該會在此方法中時重新進入呼叫。 (繼承來源 DkmThread) |
OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean) |
引發 EmbeddedBreakpointHit 事件。 實作事件接收介面的元件將會收到事件通知。 這個方法會加入事件佇列,而控件會立即返回呼叫端。 (繼承來源 DkmThread) |
OnInterceptExceptionCompleted(UInt64) |
引發 InterceptExceptionCompleted 事件。 實作事件接收介面的元件將會收到事件通知。 這個方法會加入事件佇列,而控件會立即返回呼叫端。 (繼承來源 DkmThread) |
OnThreadNameChange() |
當監視器叫用 DkmThread::NameChange 時,發送器會傳送 ThreadNameChange。 此 API 是在 Visual Studio 14 RTM (DkmApiVersion.VS14RTM) 中引進。 (繼承來源 DkmThread) |
RaiseExecutionControlException(UInt32) |
可從 IDkmSingleStepCompleteReceived 或 IDkmRuntimeBreakpointReceived 實作呼叫的 API,強制基底 DM 在目標進程中引發執行時EXCEPTION_BREAKPOINT或EXCEPTION_SINGLE_STEP例外狀況。 一般而言,會隱含隱藏斷點或單一步驟例外狀況。 這可讓目標進程內的例外狀況處理程式處理EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP。 如果線程目前不在步驟完成或斷點事件中,此 API 將會失敗。 位置條件約束:必須從監視元件呼叫 API, (元件層級 < 100,000) 。 (繼承來源 DkmThread) |
RemoveDataItem<T>() |
從這個容器中移除 『T』 的實例。 通常不需要呼叫這個方法,因為數據容器會在物件關閉時自動清空。 (繼承來源 DkmDataContainer) |
Resume(Boolean) |
繼續此線程。 (繼承來源 DkmThread) |
SetContext(Byte[]) |
更新線程) 的內容 (緩存器值。 (繼承來源 DkmThread) |
SetDataItem<T>(DkmDataCreationDisposition, T) |
將新專案放在數據容器中。 (繼承來源 DkmDataContainer) |
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>) |
在線程的內容中設定擴充緩存器的值。 (繼承來源 DkmThread) |
SetTlsValue(Int32, UInt64) |
將值儲存在偵錯線程的線程本機記憶體中, (指定 TLS 索引的 TLS) 位置。 處理序的每個執行緒都有自己專用於每個 TLS 索引的位置。 (繼承來源 DkmThread) |
Suspend(Boolean) |
暫停此線程。 (繼承來源 DkmThread) |
Unload(Int32) |
當監視器叫用 DkmThread::Unload 時,發送器會傳送 ThreadExit。 這個方法只能由建立 物件的元件呼叫。 (繼承來源 DkmThread) |