SDK auxiliares para depuração
Essas funções e as declarações são funções de auxiliar global para a implementação de mecanismos de depuração, avaliadores de expressão e provedores de símbolo em C++.
Dica
Não há nenhum gerenciadas versões dessas funções e declarações neste momento.
Visão Geral
A fim de mecanismos de depuração, avaliadores de expressão e provedores de símbolo a ser usado por Visual Studio, eles devem ser registrados. Isso é feito definindo subchaves e entradas, também conhecidas como "métricas de configuração". As seguintes funções globais são criadas para facilitar o processo de atualização essas métricas. Consulte a seção sobre os locais do registro para descobrir o layout de cada subchave do registro que é atualizado por essas funções.
Funções de métrica geral
Essas são funções gerais usadas pelos mecanismos de depuração. Especializado de funções para avaliadores de expressão e provedores de símbolo são detalhados posteriormente.
Método GetMetric
Recupera um valor de métrica do registro.
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
Parâmetro |
Descrição |
---|---|
pszMachine |
[in] Nome de uma máquina remota possivelmente cujo registro será gravado (NULL significa que a máquina local). |
pszType |
[in] Um dos tipos de métricos. |
guidSection |
[in] GUID de um mecanismo específico, avaliador, exceção etc. Especifica uma subseção de um tipo de métrica para um elemento específico. |
pszMetric |
[in] A métrica seja obtido. Isso corresponde a um nome de valor específico. |
pdwValue |
[in] O local de armazenamento do valor da métrica. Existem vários tipos de GetMetric que pode retornar um DWORD (como no exemplo), um BSTR, um GUID ou uma matriz de GUIDs. |
pszAltRoot |
[in] Uma raiz alternativa do registro para usar. Definido como NULL para usar o padrão. |
Método SetMetric
Define o valor de métrica especificado no registro.
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
Parâmetro |
Descrição |
---|---|
pszType |
[in] Um dos tipos de métricos. |
guidSection |
[in] GUID de um mecanismo específico, avaliador, exceção etc. Especifica uma subseção de um tipo de métrica para um elemento específico. |
pszMetric |
[in] A métrica seja obtido. Isso corresponde a um nome de valor específico. |
dwValue |
[in] O local de armazenamento do valor a métrica. Existem vários tipos de SetMetric que pode armazenar um DWORD (no exemplo), um BSTR, um GUID ou uma matriz de GUIDs. |
fUserSpecific |
[in] TRUE se a métrica é específica do usuário e ele deve ser escrito hive do usuário em vez de na seção de máquina local. |
pszAltRoot |
[in] Uma raiz alternativa do registro para usar. Definido como NULL para usar o padrão. |
Método RemoveMetric
Remove a métrica especificada do registro.
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
Parâmetro |
Descrição |
---|---|
pszType |
[in] Um dos tipos de métricos. |
guidSection |
[in] GUID de um mecanismo específico, avaliador, exceção etc. Especifica uma subseção de um tipo de métrica para um elemento específico. |
pszMetric |
[in] A métrica a ser removido. Isso corresponde a um nome de valor específico. |
pszAltRoot |
[in] Uma raiz alternativa do registro para usar. Definido como NULL para usar o padrão. |
Método EnumMetricSections
Enumera as métricas diversas seções do registro.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
Parâmetro |
Descrição |
---|---|
pszMachine |
[in] Nome de uma máquina remota possivelmente cujo registro será gravado (NULL significa que a máquina local). |
pszType |
[in] Um dos tipos de métricos. |
rgguidSections |
[in, out] Pré-distribuídos matriz de GUIDs devem ser preenchidas. |
pdwSize |
[in] O número máximo de GUIDs podem ser armazenados na rgguidSections array. |
pszAltRoot |
[in] Uma raiz alternativa do registro para usar. Definido como NULL para usar o padrão. |
Funções de avaliador de expressão
Função |
Descrição |
---|---|
GetEEMetric |
Recupera um valor de métrica do registro. |
SetEEMetric |
Define o valor de métrica especificado no registro. |
RemoveEEMetric |
Remove a métrica especificada do registro. |
GetEEMetricFile |
Obtém um nome de arquivo da métrica especificada e o carrega, retornando o conteúdo do arquivo como uma seqüência de caracteres. |
Funções de exceção
Função |
Descrição |
---|---|
GetExceptionMetric |
Recupera um valor de métrica do registro. |
SetExceptionMetric |
Define o valor de métrica especificado no registro. |
RemoveExceptionMetric |
Remove a métrica especificada do registro. |
RemoveAllExceptionMetrics |
Remove todas as métricas de exceção do registro. |
Funções de provedor de símbolo
Função |
Descrição |
---|---|
GetSPMetric |
Recupera um valor de métrica do registro. |
SetSPMetric |
Define o valor de métrica especificado no registro. |
RemoveSPMetric |
Remove a métrica especificada do registro. |
Funções de enumeração
Função |
Descrição |
---|---|
EnumMetricSections |
Enumera todas as métricas para um tipo de métrica especificado. |
EnumDebugEngine |
Enumera os mecanismos de depuração registrado. |
EnumEEs |
Enumera os avaliadores de expressão registrados. |
EnumExceptionMetrics |
Enumera todas as métricas de exceção. |
Definições de métricas
Essas definições podem ser usadas para nomes predefinidos de métricos. Os nomes correspondem aos nomes de valor e várias chaves de registro e são definidos como seqüências de caracteres largos: por exemplo, extern LPCWSTR metrictypeEngine.
Tipos predefinidos de métricos |
Descrição: A chave base para.... |
---|---|
metrictypeEngine |
Todas as métricas do mecanismo de depuração. |
metrictypePortSupplier |
Todas as avaliações do fornecedor de porta. |
metrictypeException |
Todas as métricas de exceção. |
metricttypeEEExtension |
Todas as extensões do avaliador de expressão. |
Propriedades do mecanismo de depuração. |
Descrição |
---|---|
metricAddressBP |
Defina como diferente de zero para indicar o suporte para pontos de interrupção de endereço. |
metricAlwaysLoadLocal |
Defina como diferente de zero para sempre carregue o mecanismo de depuração localmente. |
metricLoadInDebuggeeSession |
NÃO USADO |
metricLoadedByDebuggee |
Defina como diferente de zero para indicar que o mecanismo de depuração sempre será carregado com ou pelo programa que está sendo depurado. |
metricAttach |
Defina como diferente de zero para indicar o suporte para o anexo a programas existentes. |
metricCallStackBP |
Defina como diferente de zero para indicar o suporte para pontos de interrupção de pilha de chamada. |
metricConditionalBP |
Defina como diferente de zero para indicar o suporte para a configuração de pontos de interrupção condicionais. |
metricDataBP |
Defina como diferente de zero para indicar o suporte para a configuração de pontos de interrupção em alterações nos dados. |
metricDisassembly |
Defina como diferente de zero para indicar o suporte para a produção de uma listagem de desmontagem. |
metricDumpWriting |
Defina como diferente de zero para indicar o suporte para escrita (o despejo de memória para um dispositivo de saída) de despejo. |
metricENC |
Defina como diferente de zero para indicar o suporte para Edit and Continue. Dica Um mecanismo de depuração personalizada nunca deve defini-lo ou sempre deve defini-la como 0. |
metricExceptions |
Defina como diferente de zero para indicar o suporte para exceções. |
metricFunctionBP |
Defina como diferente de zero para indicar o suporte para pontos de interrupção (breakpoints falhar quando é chamado de um determinado nome de função) nomeados. |
metricHitCountBP |
Defina como diferente de zero para indicar o suporte para a configuração de pontos de interrupção de "ponto de acerto" (pontos de interrupção que são acionados somente depois que está sendo atingido um determinado número de vezes). |
metricJITDebug |
Defina como diferente de zero para indicar o suporte para depuração de just-in-time (o depurador é iniciado quando ocorre uma exceção em um processo em execução). |
metricMemory |
NÃO USADO |
metricPortSupplier |
Defina o CLSID do fornecedor porta se um for implementado. |
metricRegisters |
NÃO USADO |
metricSetNextStatement |
Defina como diferente de zero para indicar o suporte para definir a próxima instrução (que ignora a execução de instruções intermediárias). |
metricSuspendThread |
Defina como diferente de zero para indicar o suporte para suspender a execução do thread. |
metricWarnIfNoSymbols |
Defina como diferente de zero para indicar que o usuário será notificado se não houver nenhum símbolo. |
metricProgramProvider |
Defina o CLSID do provedor do programa. |
metricAlwaysLoadProgramProviderLocal |
Defina como diferente de zero para indicar que o provedor de programa deve ser sempre carregado localmente. |
metricEngineCanWatchProcess |
Defina como diferente de zero para indicar que o mecanismo de depuração irá observar para processar eventos em vez do provedor do programa. |
metricRemoteDebugging |
Defina como diferente de zero para indicar o suporte para depuração remota. |
metricEncUseNativeBuilder |
Defina como diferente de zero para indicar que o Edit and Continue Manager devem usar encbuild.dll do mecanismo de depuração para construir para editar e continuar. Dica Um mecanismo de depuração personalizada nunca deve defini-lo ou sempre deve defini-la como 0. |
metricLoadUnderWOW64 |
Configure essa opção como diferente de zero para indicar que o mecanismo de depuração deve ser carregado do processo de depuração com WOW quando estiver depurando um processo de 64 bits; Caso contrário, o mecanismo de depuração será carregado no processo de Visual Studio (que está sendo executado no WOW64). |
metricLoadProgramProviderUnderWOW64 |
Configure essa opção como diferente de zero para indicar que o provedor de programa deve ser carregado do processo de depuração quando estiver depurando um processo de 64 bits com WOW; Caso contrário, ele será carregado no processo de Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary |
Defina como diferente de zero para indicar que o processo deve parar se uma exceção não tratada será lançada através de limites de código gerenciado /. |
metricAutoSelectPriority |
Defina uma prioridade para a seleção automática do mecanismo de depuração (valores igual a maior prioridade mais alta). |
metricAutoSelectIncompatibleList |
Chave do registro que contém entradas que especificam os GUIDs de mecanismos de depuração seja ignorado na seleção automática. Essas entradas são um número (0, 1, 2 e assim por diante) com um GUID, expresso como uma seqüência de caracteres. |
metricIncompatibleList |
Chave do registro que contém entradas que especificam os GUIDs para mecanismos de depuração que são incompatíveis com esse mecanismo de depuração. |
metricDisableJITOptimization |
Defina como diferente de zero para indicar que as otimizações de just-in-time (para código gerenciado) devem ser desativadas durante a depuração. |
Propriedades do avaliador de expressões |
Descrição |
---|---|
metricEngine |
Isso mantém o número de mecanismos de depuração que suportam o avaliador da expressão especificada. |
metricPreloadModules |
Defina como diferente de zero para indicar que os módulos devem ser pré-carregados quando um avaliador de expressão é iniciado contra um programa. |
metricThisObjectName |
Defina o nome do objeto "this". |
Propriedades de extensão do avaliador de expressão |
Descrição |
---|---|
metricExtensionDll |
Nome da dll que oferece suporte a essa extensão. |
metricExtensionRegistersSupported |
Lista de registros com suporte. |
metricExtensionRegistersEntryPoint |
Ponto de entrada para acessar registradores. |
metricExtensionTypesSupported |
Lista de tipos com suporte. |
metricExtensionTypesEntryPoint |
Ponto de entrada para acessar tipos. |
Propriedades do fornecedor de porta |
Descrição |
---|---|
metricPortPickerCLSID |
O CLSID do seletor de porta (uma caixa de diálogo o usuário pode usar para selecionar portas e adicionar portas para depuração). |
metricDisallowUserEnteredPorts |
Diferente de zero se as portas inserido pelo usuário não podem ser adicionadas como o fornecedor de porta (Isso torna a caixa de diálogo de seleção de porta essencialmente somente leitura). |
metricPidBase |
A identificação de processo base usada pelo fornecedor porta ao alocar os IDs de processo. |
Tipos predefinidos de armazenamento de SP |
Descrição |
---|---|
storetypeFile |
Os símbolos são armazenados em um arquivo separado. |
storetypeMetadata |
Os símbolos são armazenados como metadados em um assembly. |
Propriedades variadas |
Descrição |
---|---|
metricShowNonUserCode |
Defina como diferente de zero para mostrar o código de nonuser. |
metricJustMyCodeStepping |
Defina como diferente de zero para indicar que a revisão pode ocorrer somente no código do usuário. |
metricCLSID |
CLSID para um objeto de um tipo específico de métrico. |
metricName |
Nome amigável para um objeto de um tipo específico de métrico. |
metricLanguage |
Nome do idioma. |
Locais do registro
As métricas são ler e gravadas no registro, especificamente na VisualStudio subchave.
Dica
Na maioria das vezes, as métricas serão gravadas na chave HKEY_LOCAL_MACHINE.No entanto, às vezes, HKEY_CURRENT_USER será a chave de destino.Dbgmetric.lib lida com ambas as chaves.Ao obter uma métrica, ele procura HKEY_CURRENT_USER primeiro, depois em seguida HKEY_LOCAL_MACHINE.Quando ele está definindo uma métrica, um parâmetro especifica qual chave de nível superior para usar.
[chave]\
Software\
Microsoft\
VisualStudio\
[root versão]\
[root métrica]\
[tipo de métrica]\
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Espaço reservado |
Descrição |
---|---|
[chave do Registro] |
HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE. |
[root versão] |
A versão do Visual Studio (por exemplo, 7.0, 7.1, ou 8.0). No entanto, esta raiz também pode ser modificada usando o /rootsuffix alternar para devenv.exe. Para VSIP, esse modificador é normalmente Exp, portanto, a raiz da versão seria, por exemplo, 8.0Exp. |
[root métrica] |
Pode ser uma AD7Metrics ou AD7Metrics(Debug), dependendo se a versão de depuração do dbgmetric.lib é usada. Dica Se o dbgmetric.lib for usado, ou não essa convenção de nomenclatura deverão ser seguida se você tiver as diferenças entre o debug e release versões que deverá ser refletidas no registro. |
[tipo de métrica] |
O tipo de métrica a ser gravado: Engine, ExpressionEvaluator, SymbolProvider, etc. Esses são definidos como no dbgmetric.h como metricTypeXXXX, onde XXXX é o nome de tipo específico. |
[métrica] |
O nome de uma entrada a ser atribuído um valor para definir a métrica. A organização real das métricas depende do tipo de métrica. |
[valor de métrica] |
O valor atribuído à métrica. O tipo que o valor deve ter (string), número, etc. depende a métrica. |
Dica
Todos os GUIDs são armazenados no formato de {GUID}.Por exemplo, {123D150B-FA18-461C-B218-45B3E4589F9B}.
Mecanismos de depuração.
Veja a seguir, a organização das métricas de mecanismos de depuração no registro. Engineé o nome do tipo de métrica para um mecanismo de depuração e corresponde a [tipo de métrica] na subárvore do registro acima.
Engine\
[guid do motor]\
CLSID= [guid de classe]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
PortSupplier\
0= [guid do fornecedor de porta]
1= [guid do fornecedor de porta]
Espaço reservado |
Descrição |
---|---|
[engine guid] |
O GUID do mecanismo de depuração. |
[guid de classe] |
O GUID da classe que implementa este mecanismo de depuração. |
[guid do fornecedor de porta] |
O GUID do fornecedor de porta, se houver. Muitos mecanismos de depuração, usam o fornecedor de porta padrão e, portanto, não especificam seu próprio fornecedor. Neste caso, a subchave PortSupplier estará ausente. |
Fornecedores de porta
Veja a seguir, a organização das métricas de fornecedor de porta no registro. PortSupplieré o nome do tipo de métrica para um fornecedor de porta e corresponde a [tipo de métrica].
PortSupplier\
[guid do fornecedor de porta]\
CLSID= [guid de classe]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Espaço reservado |
Descrição |
---|---|
[guid do fornecedor de porta] |
O GUID do fornecedor de porta |
[guid de classe] |
O GUID da classe que implementa este fornecedor de porta |
Provedores de símbolo
Veja a seguir, a organização das métricas de fornecedor do símbolo no registro. SymbolProvideré o nome do tipo de métrica para o provedor de símbolo e corresponde a [tipo de métrica].
SymbolProvider\
[símbolo guid do provedor]\
file\
CLSID= [guid de classe]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
metadata\
CLSID= [guid de classe]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Espaço reservado |
Descrição |
---|---|
[símbolo guid do provedor] |
O GUID do provedor do símbolo |
[guid de classe] |
O GUID da classe que implementa este provedor de símbolo |
Avaliadores de expressão
Veja a seguir, a organização das métricas de avaliador de expressão no registro. ExpressionEvaluatoré o nome de tipo de métrica para o avaliador da expressão e corresponde a [tipo de métrica].
Dica
O tipo de métrica para ExpressionEvaluator não está definida no dbgmetric.h, como presume-se que todas as alterações da métrica de avaliadores de expressão percorrer as funções de métrica de avaliador de expressão apropriada (o layout da ExpressionEvaluator subchave é um pouco complicado, e assim os detalhes são ocultas dentro de dbgmetric.lib).
ExpressionEvaluator\
[idioma guid]\
[fornecedor guid]\
CLSID= [guid de classe]
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Engine\
0= [guid do mecanismo de depuração]
1= [guid do mecanismo de depuração]
Espaço reservado |
Descrição |
---|---|
[idioma guid] |
O GUID de um idioma |
[fornecedor guid] |
O GUID de um fornecedor. |
[guid de classe] |
O GUID da classe que implementa esta avaliador de expressão |
[guid do mecanismo de depuração] |
O GUID de um mecanismo de depuração que este avaliador de expressão funciona com |
Extensões do avaliador de expressão
Veja a seguir, a organização das métricas de extensão de avaliador de expressão no registro. EEExtensionsé o nome do tipo de métrica para a expressão de extensões do avaliador e corresponde a [tipo de métrica].
EEExtensions\
[guid de extensão]\
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Espaço reservado |
Descrição |
---|---|
[guid de extensão] |
O GUID de uma extensão do avaliador de expressão |
Exceções
Veja a seguir, a organização das métricas exceções no registro. Exceptioné o nome do tipo de métrica para as exceções e corresponde a [tipo de métrica].
Exception\
[guid do mecanismo de depuração]\
[tipos de exceção]\
[exceção]\
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
[exceção]\
[métrica] = [valor de métrica]
[métrica] = [valor de métrica]
Espaço reservado |
Descrição |
---|---|
[guid do mecanismo de depuração] |
O GUID de um mecanismo de depuração que ofereça suporte a exceções. |
[tipos de exceção] |
Um título geral para a subchave identificando a classe de exceções que podem ser manipulados. Typical names are C++ Exceptions, Win32 Exceptions, Common Language Runtime Exceptions, and Native Run-Time Checks. Esses nomes são também usados para identificar uma determinada classe de exceção para o usuário. |
[exceção] |
Um nome para uma exceção: por exemplo, _com_error ou Control-Break. Esses nomes são também usados para identificar uma exceção específica para o usuário. |
Requisitos
Esses arquivos estão localizados na Microsoft Visual Studio 2010 diretório de instalação do SDK (por padrão, [drive]\Arquivos de Programas\Microsoft Visual Studio SDK\ de 2010).
Cabeçalho: includes\dbgmetric.h
Biblioteca: libs\ad2de.lib, libs\dbgmetric.lib