SDK 協助程式進行偵錯
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
這些函式和宣告是 c + + 中實作的偵錯引擎、 運算式評估工具和符號提供者的全域 helper 函式。
注意
此時沒有任何受管理的版本,這些函式和宣告。
概觀
在 Visual Studio 所使用的偵錯引擎、 運算式評估工具,和符號提供者順序,也必須進行註冊。 這是藉由設定登錄子機碼和項目,又稱為 「 設定度量 」。 下列全域函式被設計來簡化更新這些度量的程序。 請參閱登錄位置,以找出這些函式會更新每個登錄子機碼的版面配置的區段。
一般標準函式
這些是一般的偵錯引擎所使用的功能。 運算式評估工具針對特製化函式和符號提供者的稍後詳細說明。
GetMetric 方法
從登錄擷取的基準值。
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
參數 | 說明 |
---|---|
pszMachine | [in]將寫入其註冊,可能是遠端機器的名稱 (NULL 表示本機電腦)。 |
pszType | [in]其中一個指標類型。 |
guidSection | [in]特定的引擎、 評估工具、 例外狀況等的 GUID。這會指定特定項目的指標類型] 下的子區段。 |
pszMetric | [in]取得度量。 這會對應到特定值的名稱。 |
pdwValue | [in]儲存體的計量值的位置。 有數種 GetMetric 可傳回 DWORD (如此範例所示)、 BSTR、 GUID 或 Guid 的陣列。 |
pszAltRoot | [in]若要使用替代的登錄根目錄。 設定為NULL 使用預設值。 |
SetMetric 方法
在登錄中設定指定的度量值。
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
參數 | 說明 |
---|---|
pszType | [in]其中一個指標類型。 |
guidSection | [in]特定的引擎、 評估工具、 例外狀況等的 GUID。這會指定特定項目的指標類型] 下的子區段。 |
pszMetric | [in]取得度量。 這會對應到特定值的名稱。 |
dwValue | [in]在 [度量] 值的儲存位置。 有數種 SetMetric 可以儲存 (在此範例中) 的 DWORD、 BSTR、 GUID 或 Guid 的陣列。 |
fUserSpecific | [in]如果度量是特定使用者,且應寫入使用者的登錄,而不是本機電腦登錄區,則為 TRUE。 |
pszAltRoot | [in]若要使用替代的登錄根目錄。 設定為NULL 使用預設值。 |
RemoveMetric 方法
從登錄中移除指定的度量。
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
參數 | 描述 |
---|---|
pszType | [in]其中一個指標類型。 |
guidSection | [in]特定的引擎、 評估工具、 例外狀況等的 GUID。這會指定特定項目的指標類型] 下的子區段。 |
pszMetric | [in]要移除度量。 這會對應到特定值的名稱。 |
pszAltRoot | [in]若要使用替代的登錄根目錄。 設定為NULL 使用預設值。 |
EnumMetricSections 方法
列舉在登錄中的不同度量的區段。
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
參數 | 說明 |
---|---|
pszMachine | [in]將寫入其註冊,可能是遠端機器的名稱 (NULL 表示本機電腦)。 |
pszType | [in]其中一個指標類型。 |
rgguidSections | [in、 out]預先配置的 Guid,以填入的陣列。 |
pdwSize | [in]儲存的 Guid 的最大數目rgguidSections 陣列。 |
pszAltRoot | [in]若要使用替代的登錄根目錄。 設定為NULL 使用預設值。 |
運算式評估工具函式
函式 | 描述 |
---|---|
GetEEMetric | 從登錄擷取的基準值。 |
SetEEMetric | 在登錄中設定指定的度量值。 |
RemoveEEMetric | 從登錄中移除指定的度量。 |
GetEEMetricFile | 取得檔案名稱,從指定的度量並將其載入,以字串形式傳回檔案內容。 |
例外狀況函式
函式 | 說明 |
---|---|
GetExceptionMetric | 從登錄擷取的基準值。 |
SetExceptionMetric | 在登錄中設定指定的度量值。 |
RemoveExceptionMetric | 從登錄中移除指定的度量。 |
RemoveAllExceptionMetrics | 從登錄中移除所有例外狀況的度量。 |
符號提供者函式
函式 | 描述 |
---|---|
GetSPMetric | 從登錄擷取的基準值。 |
SetSPMetric | 在登錄中設定指定的度量值。 |
RemoveSPMetric | 從登錄中移除指定的度量。 |
列舉型別函式
函式 | 說明 |
---|---|
EnumMetricSections | 列舉指定的單位類型的所有度量。 |
EnumDebugEngine | 列舉已註冊的偵錯引擎。 |
EnumEEs | 列舉已註冊的運算式評估工具。 |
EnumExceptionMetrics | 列舉所有例外狀況的度量。 |
標準定義
這些定義可以用於預先定義的度量名稱。 名稱對應至各種登錄機碼和值名稱都是定義為寬字元字串︰ 例如, extern LPCWSTR metrictypeEngine
。
預先定義的指標類型 | 描述︰ 主要機碼... |
---|---|
metrictypeEngine | 所有偵錯引擎度量。 |
metrictypePortSupplier | 所有連接埠供應商的度量。 |
metrictypeException | 所有例外狀況的度量。 |
metricttypeEEExtension | 所有的運算式評估工具延伸模組。 |
偵錯引擎屬性 | 說明 |
---|---|
metricAddressBP | 設定為非零,表示支援位址中斷點。 |
metricAlwaysLoadLocal | 設定為非零值,以便永遠載入的偵錯引擎在本機。 |
metricLoadInDebuggeeSession | 未使用 |
metricLoadedByDebuggee | 設定為非零值以表示或正在進行偵錯程式,一定會載入偵錯引擎。 |
metricAttach | 設定為非零,表示支援,以便附加到現有的程式。 |
metricCallStackBP | 設定為非零,表示呼叫堆疊中斷點的支援。 |
metricConditionalBP | 設定為非零值來指出支援的設定條件中斷點。 |
metricDataBP | 設定為非零值來指出支援的設定資料變更時的中斷點。 |
metricDisassembly | 設定為非零值來指出支援反組譯碼清單的生產環境。 |
metricDumpWriting | 設定為非零來指示傾印寫入 (傾印的輸出裝置的記憶體) 的支援。 |
metricENC | 設定為非零,表示支援編輯後繼續]。 注意︰自訂偵錯引擎應該永遠不會將此設定,或應該一律設為 0。 |
metricExceptions | 設定為非零值以指出例外狀況的支援。 |
metricFunctionBP | 設定為非零,表示具名中斷點 (中斷呼叫特定函式名稱時的中斷點) 的支援。 |
metricHitCountBP | 設定為非零,表示支援 「 點擊點 」 中斷點 (只有在達到特定次數之後,才會觸發中斷點) 的設定。 |
metricJITDebug | 設定為非零,表示支援在 just-in-time 偵錯 (偵錯工具會啟動時執行的處理序中發生例外狀況)。 |
metricMemory | 未使用 |
metricPortSupplier | 設定為連接埠提供者的 CLSID 如果實作其中一個。 |
metricRegisters | 未使用 |
metricSetNextStatement | 設定為非零值來指出支援的設定下一個陳述式 (這會略過中繼陳述式執行)。 |
metricSuspendThread | 設定為非零值來指出支援的暫止執行緒的執行。 |
metricWarnIfNoSymbols | 設定為非零,表示沒有符號時,會通知使用者。 |
metricProgramProvider | 設定為程式提供者的 CLSID。 |
metricAlwaysLoadProgramProviderLocal | 將此設為非零,表示程式提供者應該一律將載入本機的。 |
metricEngineCanWatchProcess | 設定為非零,表示偵錯引擎會等待處理的事件,而程式的提供者。 |
metricRemoteDebugging | 設定為非零,表示支援遠端偵錯。 |
metricEncUseNativeBuilder | 將此設為非零,表示編輯後繼續的管理員應該使用偵錯引擎的 encbuild.dll 編輯後繼續建置的。 注意︰自訂偵錯引擎應該永遠不會將此設定,或應該一律設為 0。 |
metricLoadUnderWOW64 | 將此設定為非零值表示在 WOW 下偵錯項目處理序中應該載入的偵錯引擎,當偵錯 64 位元處理序;否則,偵錯引擎會載入 Visual Studio 處理序 (這在 WOW64 下執行) 中。 |
metricLoadProgramProviderUnderWOW64 | 將此設定為非零,表示程式提供者應該在偵錯項目處理序中載入,在 WOW; 下的 64 位元處理序進行偵錯時否則,會載入 Visual Studio 處理序中。 |
metricStopOnExceptionCrossingManagedBoundary | 設定為非零,表示遠弗 managed/unmanaged 程式碼擲回未處理的例外狀況時,應該停止處理程序。 |
metricAutoSelectPriority | 設定為自動選擇偵錯引擎 (優先順序較高的值等於更高版本) 的優先順序。 |
metricAutoSelectIncompatibleList | 登錄機碼含有指定 Guid 的偵錯引擎會忽略自動選取範圍中的項目。 這些項目是一個數字 (0、 1、 2,依此類推) 以 GUID 表示為字串。 |
metricIncompatibleList | 包含項目,指定與此偵錯引擎不相容的偵錯引擎 Guid 的登錄機碼。 |
metricDisableJITOptimization | 設定為非零值,指出應該在偵錯期間停用 (適用於 managed 程式碼)-just-in-time 最佳化。 |
運算式評估工具內容 | 說明 |
---|---|
metricEngine | 這會保存支援指定的運算式評估工具的偵錯引擎的數目。 |
metricPreloadModules | 設定為非零,表示運算式評估工具對程式啟動時,應該預先載入的模組。 |
metricThisObjectName | 設定為"this"的物件名稱。 |
運算式評估工具的擴充屬性 | 描述 |
---|---|
metricExtensionDll | 可支援此擴充 dll 的名稱。 |
metricExtensionRegistersSupported | 支援的暫存器的清單。 |
metricExtensionRegistersEntryPoint | 用於存取暫存器的進入點。 |
metricExtensionTypesSupported | 支援的類型清單。 |
metricExtensionTypesEntryPoint | 存取類型的進入點。 |
連接埠供應商屬性 | 說明 |
---|---|
metricPortPickerCLSID | (對話方塊的使用者可以使用選取的連接埠,並新增連接埠,以用於偵錯) 的連接埠選擇器的 CLSID。 |
metricDisallowUserEnteredPorts | 如果使用者輸入連接埠無法加入至連接埠提供者為非零 (基本上是唯讀,這讓連接埠選擇器對話方塊)。 |
metricPidBase | 配置處理序識別碼時,連接埠提供者所使用的基底的處理序識別碼。 |
預先定義的預存程序存放區型別 | 說明 |
---|---|
storetypeFile | 符號會儲存在不同的檔案。 |
storetypeMetadata | 符號會儲存為組件中的中繼資料。 |
其他屬性 | 描述 |
---|---|
metricShowNonUserCode | 設定為非零的顯示 nonuser 程式碼。 |
metricJustMyCodeStepping | 設定為非零,表示只會在使用者程式碼可以發生逐步執行。 |
metricCLSID | 特定的度量型別的物件的 CLSID。 |
metricName | 特定的度量型別的物件的使用者易記名稱。 |
metricLanguage | 語言名稱。 |
登錄位置
度量會讀取和寫入登錄,特別是在VisualStudio
子機碼。
注意
大部分的情況下,在 HKEY_LOCAL_MACHINE 機碼會寫入度量。 不過,有時候 HKEY_CURRENT_USER 是目的金鑰。 Dbgmetric.lib 會處理兩個索引鍵。 當取得度量資訊時,它會搜尋 HKEY_CURRENT_USER 先,接著 HKEY_LOCAL_MACHINE。 當它設定度量時,參數會指定要使用哪一個最上層機碼。
[登錄機碼]\
Software
\
Microsoft
\
VisualStudio
\
[版本 root]\
[度量 root]\
[度量] 型別\
[度量] = [指標值]
[度量] = [指標值]
[度量] = [指標值]
預留位置 | 說明 |
---|---|
[登錄機碼] | HKEY_CURRENT_USER 或 HKEY_LOCAL_MACHINE 。 |
[版本 root] | Visual Studio 的版本 (例如, 7.0 , 7.1 ,或8.0 )。 不過,這個根目錄也可以修改使用/rootsuffix切換至devenv.exe。 VSIP,對於此修飾詞通常是Exp,因此版本根是,比方說,8.0Exp。 |
[度量 root] | 這可能是AD7Metrics 或AD7Metrics(Debug) ,取決於是否使用 dbgmetric.lib 的偵錯版本。 注意︰是否使用 dbgmetric.lib 時,此命名慣例應遵守有偵錯和發行之間的差異必須反映在登錄中的版本。 |
[度量] 型別 | 要寫入的標準的類型︰ Engine , ExpressionEvaluator ,SymbolProvider 等等。這些都定義如所示為 dbgmetric.h metricTypeXXXX ,其中XXXX 是特定型別名稱。 |
[度量] | 要指派值,才能設定基準設定項目的名稱。 實際的組織的度量取決於指標的類型。 |
[基準值] | 指派給度量的值。 值應該有 (字串、 數值、 等等) 的類型取決於度量。 |
注意
儲存所有的 Guid 格式的{GUID}
。 例如,{123D150B-FA18-461C-B218-45B3E4589F9B}
。
偵錯引擎
以下是在登錄中的偵錯引擎度量的組織。 Engine
是偵錯引擎的衡量標準的類型名稱,對應於*[度量型別]*上述的登錄樹狀子目錄中。
Engine
\
[引擎 guid]\
CLSID
= [類別 guid]
[度量] = [指標值]
[度量] = [指標值]
[度量] = [指標值]
PortSupplier
\
0
= [連接埠供應商 guid]
1
= [連接埠供應商 guid]
預留位置 | 說明 |
---|---|
[引擎 guid] | 偵錯引擎的 GUID。 |
[類別 guid] | 實作此偵錯引擎的類別的 GUID。 |
[連接埠供應商 guid] | 如果有任何連接埠供應商的 GUID。 許多偵錯引擎使用預設連接埠提供者,並因此不會指定他們自己的供應商。 在此情況下,子機碼PortSupplier 就不會有。 |
連接埠供應商
以下是在登錄中的連接埠供應商度量的組織。 PortSupplier
是一個連接埠的供應商的度量類型名稱,對應於*[度量型別]*。
PortSupplier
\
[連接埠供應商 guid]\
CLSID
= [類別 guid]
[度量] = [指標值]
[度量] = [指標值]
預留位置 | 說明 |
---|---|
[連接埠供應商 guid] | 連接埠提供者的 GUID |
[類別 guid] | 類別會實作此通訊埠供應商的 GUID |
符號提供者
以下是在登錄中的符號供應商度量的組織。 SymbolProvider
是的符號提供者的衡量標準的類型名稱,對應於*[度量型別]*。
SymbolProvider
\
[符號提供者 guid]\
file
\
CLSID
= [類別 guid]
[度量] = [指標值]
[度量] = [指標值]
metadata
\
CLSID
= [類別 guid]
[度量] = [指標值]
[度量] = [指標值]
預留位置 | 說明 |
---|---|
[符號提供者 guid] | 符號提供者的 GUID |
[類別 guid] | 類別會實作這個符號提供者的 GUID |
運算式評估工具
以下是在登錄中的運算式評估工具度量的組織。 ExpressionEvaluator
是,運算式評估工具的衡量標準的型別名稱,對應於*[度量型別]*。
注意
指標類型ExpressionEvaluator
中未定義 dbgmetric.h,因為它會假設所有的度量變更的運算式評估工具都會經過適當的運算式評估工具度量函式 (的版面配置ExpressionEvaluator
子機碼是有點複雜,因此 dbgmetric.lib 內會隱藏詳細資料)。
ExpressionEvaluator
\
[語言 guid]\
[廠商 guid]\
CLSID
= [類別 guid]
[度量] = [指標值]
[度量] = [指標值]
Engine
\
0
= [偵錯引擎 guid]
1
= [偵錯引擎 guid]
預留位置 | 說明 |
---|---|
[語言 guid] | 一種語言的 GUID |
[廠商 guid] | 供應商的 GUID |
[類別 guid] | 類別會實作此運算式評估工具的 GUID |
[偵錯引擎 guid] | 此運算式評估工具的運作方式與偵錯引擎的 GUID |
運算式評估工具擴充功能
以下是在登錄中的運算式評估工具延伸模組度量的組織。 EEExtensions
為指標型別名稱的運算式評估工具延伸模組和對應至*[度量型別]*。
EEExtensions
\
[延伸模組 guid]\
[度量] = [指標值]
[度量] = [指標值]
預留位置 | 描述 |
---|---|
[延伸模組 guid] | 運算式評估工具延伸模組的 GUID |
例外狀況
以下是在登錄中的例外狀況度量的組織。 Exception
是,該例外狀況的度量的型別名稱,對應於*[度量型別]*。
Exception
\
[偵錯引擎 guid]\
[例外狀況型別]\
[例外狀況]\
[度量] = [指標值]
[度量] = [指標值]
[例外狀況]\
[度量] = [指標值]
[度量] = [指標值]
預留位置 | 說明 |
---|---|
[偵錯引擎 guid] | 支援例外狀況的偵錯引擎的 GUID。 |
[例外狀況型別] | 識別可以處理的例外狀況類別的子機碼的一般標題。 一般名稱是c + + 例外狀況, Win32 例外狀況, Common Language Runtime 例外狀況,和原生執行階段會檢查。 這些名稱也會用來識別特定類別的使用者例外狀況。 |
[例外狀況] | 例外狀況的名稱︰ 例如, _com_error或控制中斷。 這些名稱也會用來識別使用者特定的例外狀況。 |
需求
這些檔案都位於Microsoft Visual Studio 2010SDK 安裝目錄 (根據預設, *[磁碟機]*files\microsoft Visual Studio 2010 SDK\)。
標頭︰ includes\dbgmetric.h
程式庫︰ libs\ad2de.lib、 libs\dbgmetric.lib