Auxiliares do SDK para depuração
Essas funções e declarações são funções auxiliares globais para implementar mecanismos de depuração, avaliadores de expressão e provedores de símbolos em C++.
Observação
Não há versões gerenciadas dessas funções e declarações no momento.
Para que mecanismos de depuração, avaliadores de expressão e provedores de símbolos sejam usados pelo Visual Studio, eles devem ser registrados. Isso é feito definindo subchaves e entradas do Registro, também conhecido como "configuração de métricas". As funções globais a seguir foram projetadas para facilitar o processo de atualização dessas métricas. Consulte a seção Locais do Registro para descobrir o layout de cada subchave do Registro atualizada por essas funções.
Funções métricas gerais
Essas são funções gerais usadas por mecanismos de depuração. Funções especializadas para avaliadores de expressão e provedores de símbolos são detalhadas posteriormente.
GetMetric Método
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 |
---|---|
pszMáquina | [em] Nome de uma máquina possivelmente remota cujo registro será escrito (NULL significa máquina local). |
pszType | [em] Um dos tipos métricos. |
guidSeção | [em] GUID de um mecanismo específico, avaliador, exceção, etc. Isso especifica uma subseção em um tipo de métrica para um elemento específico. |
pszMétrico | [em] A métrica a ser obtida. Isso corresponde a um nome de valor específico. |
Valor pdw; | [em] O local de armazenamento do valor da métrica. Há vários tipos de GetMetric que podem retornar um DWORD (como neste exemplo), um BSTR, um GUID ou uma matriz de GUIDs. |
pszAltRoot | [em] Uma raiz de registro alternativa a ser usada. Defina como NULL para usar o padrão. |
SetMetric Método
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 | [em] Um dos tipos métricos. |
guidSeção | [em] GUID de um mecanismo específico, avaliador, exceção, etc. Isso especifica uma subseção em um tipo de métrica para um elemento específico. |
pszMétrico | [em] A métrica a ser obtida. Isso corresponde a um nome de valor específico. |
dwValor | [em] O local de armazenamento do valor na métrica. Há vários tipos de SetMetric que podem armazenar um DWORD (neste exemplo), um BSTR, um GUID ou uma matriz de GUIDs. |
fUserSpecific | [em] TRUE se a métrica for específica do usuário e se ela deve ser gravada no hive do usuário em vez da colmeia da máquina local. |
pszAltRoot | [em] Uma raiz de registro alternativa a ser usada. Defina 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 | [em] Um dos tipos métricos. |
guidSeção | [em] GUID de um mecanismo específico, avaliador, exceção, etc. Isso especifica uma subseção em um tipo de métrica para um elemento específico. |
pszMétrico | [em] A métrica a ser removida. Isso corresponde a um nome de valor específico. |
pszAltRoot | [em] Uma raiz de registro alternativa a ser usada. Defina como NULL para usar o padrão. |
Método EnumMetricSections
Enumera as várias seções métricas no Registro.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
Parâmetro | Descrição |
---|---|
pszMáquina | [em] Nome de uma máquina possivelmente remota cujo registro será escrito (NULL significa máquina local). |
pszType | [em] Um dos tipos métricos. |
rgguidSeções | [dentro, fora] Matriz pré-alocada de GUIDs a serem preenchidos. |
pdwTamanho | [em] O número máximo de GUIDs que podem ser armazenados na rgguidSections matriz. |
pszAltRoot | [em] Uma raiz de registro alternativa a ser usada. Defina como NULL para usar o padrão. |
Funções do 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 cadeia 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 do provedor de símbolos
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 |
---|---|
EnumMetricSeções | Enumera todas as métricas para um tipo de métrica especificado. |
EnumDebugEngine | Enumera os mecanismos de depuração registrados. |
EnumEEs | Enumera os avaliadores de expressão registrados. |
EnumExceptionMetrics | Enumera todas as métricas de exceção. |
Definições de métrica
Essas definições podem ser usadas para nomes de métricas predefinidos. Os nomes correspondem a várias chaves do Registro e nomes de valor e são todos definidos como cadeias de caracteres largas: por exemplo, extern LPCWSTR metrictypeEngine
.
Tipos de métricas predefinidos | Descrição: A chave base para.... |
---|---|
metrictypeEngine | Todas as métricas do mecanismo de depuração. |
metrictypePortSupplier | Todas as métricas do fornecedor portuário. |
metrictypeException | Todas as métricas de exceção. |
metricttypeEEExtensão | 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 suporte para pontos de interrupção de endereço. |
metricAlwaysLoadLocal | Defina como diferente de zero para sempre carregar 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 suporte para anexo a programas existentes. |
metricCallStackBP | Defina como diferente de zero para indicar suporte para pontos de interrupção de pilha de chamadas. |
metricConditionalBP | Defina como diferente de zero para indicar suporte para a configuração de pontos de interrupção condicionais. |
metricDataBP | Defina como diferente de zero para indicar suporte para a configuração de pontos de interrupção em alterações nos dados. |
metricDisassembly | Defina como diferente de zero para indicar suporte para a produção de uma listagem de desmontagem. |
metricDumpWriting | Defina como diferente de zero para indicar suporte para gravação de despejo (o despejo de memória para um dispositivo de saída). |
métricaENC | Defina como diferente de zero para indicar suporte para Editar e Continuar. Nota: Um mecanismo de depuração personalizado nunca deve definir isso ou sempre deve defini-lo como 0. |
metricExceptions | Defina como diferente de zero para indicar suporte para exceções. |
metricFunctionBP | Defina como diferente de zero para indicar suporte para pontos de interrupção nomeados (pontos de interrupção que quebram quando um determinado nome de função é chamado). |
metricHitCountBP | Defina como diferente de zero para indicar suporte para a configuração de pontos de interrupção de "ponto de acerto" (pontos de interrupção que são acionados somente após serem atingidos um determinado número de vezes). |
metricJITDebug | Defina como diferente de zero para indicar suporte para depuração just-in-time (o depurador é iniciado quando ocorre uma exceção em um processo em execução). |
metricMemory | NÃO USADO |
metricPortSupplier | Defina isso como o CLSID do fornecedor da porta se um for implementado. |
metricRegisters | NÃO USADO |
metricSetNextStatement | Defina como diferente de zero para indicar 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 suporte para suspender a execução do thread. |
metricWarnIfNoSymbols | Defina como diferente de zero para indicar que o usuário deve ser notificado se não houver símbolos. |
metricProgramProvider | Defina isso como o CLSID do provedor do programa. |
metricAlwaysLoadProgramProviderLocal | Defina isso como diferente de zero para indicar que o provedor de programa sempre deve ser carregado localmente. |
metricEngineCanWatchProcess | Defina isso como diferente de zero para indicar que o mecanismo de depuração observará eventos de processo em vez do provedor do programa. |
metricRemoteDebugging | Defina isso como diferente de zero para indicar suporte para depuração remota. |
metricEncUseNativeBuilder | Defina isso como diferente de zero para indicar que o Gerenciador de Edição e Continuação deve usar o encbuild do mecanismo de depuração.dll para compilar para Editar e Continuar. Nota: Um mecanismo de depuração personalizado nunca deve definir isso ou sempre deve defini-lo como 0. |
metricLoadUnderWOW64 | Defina isso como diferente de zero para indicar que o mecanismo de depuração deve ser carregado no processo de depuração em WOW ao depurar um processo de 64 bits; caso contrário, o mecanismo de depuração será carregado no processo do Visual Studio (que está sendo executado em WOW64). |
metricLoadProgramProviderUnderWOW64 | Defina isso como diferente de zero para indicar que o provedor de programa deve ser carregado no processo de depuração ao depurar um processo de 64 bits em WOW; caso contrário, ele será carregado no processo do Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary | Defina isso como diferente de zero para indicar que o processo deve parar se uma exceção não tratada for lançada através dos limites de código gerenciado/não gerenciado. |
metricAutoSelectPriority | Defina isso como uma prioridade para seleção automática do mecanismo de depuração (valores mais altos são iguais a prioridade mais alta). |
metricAutoSelectIncompatibleList | Chave do Registro que contém entradas que especificam GUIDs para mecanismos de depuração a serem ignorados 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 cadeia de caracteres. |
metricIncompatibleList | Chave do Registro que contém entradas que especificam GUIDs para mecanismos de depuração incompatíveis com esse mecanismo de depuração. |
metricDisableJITOptimization | Defina isso como diferente de zero para indicar que as otimizações just-in-time (para código gerenciado) devem ser desabilitadas durante a depuração. |
Propriedades do avaliador de expressão | Descrição |
---|---|
metricEngine | Isso contém o número de mecanismos de depuração que oferecem suporte ao avaliador de expressão especificado. |
metricPreloadModules | Defina isso como diferente de zero para indicar que os módulos devem ser pré-carregados quando um avaliador de expressão é iniciado em um programa. |
metricThisObjectName | Defina isso como o nome do objeto "this". |
Propriedades da extensão do avaliador de expressão | Descrição |
---|---|
metricExtensionDll | Nome da dll que suporta esta extensão. |
metricExtensionRegistersSupported | Lista de registros suportados. |
metricExtensionRegistersEntryPoint | Ponto de entrada para acesso aos registros. |
metricExtensionTypesSupported | Lista de tipos suportados. |
metricExtensionTypesEntryPoint | Ponto de entrada para acessar tipos. |
Propriedades do fornecedor portuário | Descrição |
---|---|
metricPortPickerCLSID | O CLSID do seletor de portas (uma caixa de diálogo que o usuário pode usar para selecionar portas e adicionar portas a serem usadas para depuração). |
metricDisallowUserEnteredPorts | Diferente de zero se as portas inseridas pelo usuário não puderem ser adicionadas ao fornecedor da porta (isso torna a caixa de diálogo do seletor de portas essencialmente somente leitura). |
metricPidBase | O ID do processo base usado pelo fornecedor da porta ao alocar IDs de processo. |
Tipos de armazenamento de SP predefinidos | Descrição |
---|---|
storetypeFile | Os símbolos são armazenados em um arquivo separado. |
storetypeMetadados | Os símbolos são armazenados como metadados em um assembly. |
Propriedades Diversas | Descrição |
---|---|
metricShowNonUserCode | Defina isso como diferente de zero para mostrar o código de não usuário. |
metricJustMyCodeStepping | Defina isso 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 de métrica específico. |
metricName | Nome amigável para um objeto de um tipo de métrica específico. |
métricaLinguagem | Nome do idioma. |
Locais de registro
As métricas são lidas e gravadas no registro, especificamente na VisualStudio
subchave.
Observação
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 manipula ambas as chaves. Ao obter uma métrica, ele pesquisa primeiro HKEY_CURRENT_USER e, em seguida, HKEY_LOCAL_MACHINE. Quando ele está definindo uma métrica, um parâmetro especifica qual chave de nível superior usar.
[chave do Registro]\
Software
\
Microsoft
\
VisualStudio
\
[raiz da versão]\
[raiz métrica]\
[tipo métrico]\
[métrica] = [valor métrico]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Espaço reservado | Descrição |
---|---|
[chave do Registro] | HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE . |
[raiz da versão] | A versão do Visual Studio (por exemplo, , 7.0 7.1 ou 8.0 ). No entanto, essa raiz também pode ser modificada usando a opção /rootsuffix para devenv.exe. Para VSIP, esse modificador é normalmente Exp, então a raiz da versão seria, por exemplo, 8.0Exp. |
[raiz métrica] | Isso é ou AD7Metrics AD7Metrics(Debug) , dependendo se a versão de depuração do dbgmetric.lib é usada. Nota: Independentemente de dbgmetric.lib ser usado ou não, essa convenção de nomenclatura deve ser respeitada se você tiver diferenças entre as versões de depuração e lançamento que devem ser refletidas no registro. |
[tipo métrico] | O tipo de métrica a ser escrita: Engine , , ExpressionEvaluator , SymbolProvider etc. Todos eles são definidos como em dbgmetric.h como metricTypeXXXX , onde XXXX é o nome do tipo específico. |
[métrica] | O nome de uma entrada a ser atribuída um valor para definir a métrica. A organização real das métricas depende do tipo de métrica. |
[valor métrico] | O valor atribuído à métrica. O tipo que o valor deve ter (string, number, etc.) depende da métrica. |
Observação
Todos os GUIDs são armazenados no formato de {GUID}
. Por exemplo, {123D150B-FA18-461C-B218-45B3E4589F9B}
.
Mecanismos de depuração
A seguir está a organização das métricas dos 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 métrico]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
PortSupplier
\
0
= [GUID do fornecedor portuário]
1
= [GUID do fornecedor portuário]
Espaço reservado | Descrição |
---|---|
[GUID do motor] | O GUID do mecanismo de depuração. |
[GUID de classe] | O GUID da classe que implementa esse mecanismo de depuração. |
[GUID do fornecedor portuário] | O GUID do fornecedor portuário, se houver. Muitos mecanismos de depuração usam o fornecedor de porta padrão e, portanto, não especificam seu próprio fornecedor. Nesse caso, a subchave PortSupplier estará ausente. |
Fornecedores de porta
A seguir está a organização das métricas do fornecedor portuário 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 portuário]\
CLSID
= [GUID de classe]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Espaço reservado | Descrição |
---|---|
[GUID do fornecedor portuário] | O GUID do fornecedor do porto |
[GUID de classe] | O GUID da classe que implementa este fornecedor de porta |
Provedores de símbolos
A seguir está a organização das métricas de fornecedor de 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
\
[GUID do provedor de símbolos]\
file
\
CLSID
= [GUID de classe]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
metadata
\
CLSID
= [GUID de classe]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Espaço reservado | Descrição |
---|---|
[GUID do provedor de símbolos] | O GUID do provedor de símbolos |
[GUID de classe] | O GUID da classe que implementa esse provedor de símbolos |
Avaliadores de Expressão
A seguir está a organização das métricas do avaliador de expressão no registro. ExpressionEvaluator
é o nome do tipo de métrica para o avaliador de expressão e corresponde a [tipo de métrica].
Observação
O tipo de métrica para não é definido em dbgmetric.h, pois presume-se que todas as alterações de métrica para ExpressionEvaluator
avaliadores de expressão passarão pelas funções métricas apropriadas do avaliador de expressão (o layout da subchave é um pouco complicado, portanto, os detalhes ficam ocultos dentro de ExpressionEvaluator
dbgmetric.lib).
ExpressionEvaluator
\
[GUID de idioma]\
[GUID do fornecedor]\
CLSID
= [GUID de classe]
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Engine
\
0
= [GUID do mecanismo de depuração]
1
= [GUID do mecanismo de depuração]
Espaço reservado | Descrição |
---|---|
[GUID de idioma] | O GUID de um idioma |
[GUID do fornecedor] | O GUID de um fornecedor |
[GUID de classe] | O GUID da classe que implementa esse avaliador de expressão |
[GUID do mecanismo de depuração] | O GUID de um mecanismo de depuração com o qual esse avaliador de expressão trabalha |
Extensões do Avaliador de Expressão
A seguir está a organização das métricas de extensão do avaliador de expressão no registro. EEExtensions
é o nome do tipo de métrica para as extensões do avaliador de expressão e corresponde a [tipo de métrica].
EEExtensions
\
[GUID de extensão]\
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Espaço reservado | Descrição |
---|---|
[GUID de extensão] | O GUID de uma extensão do avaliador de expressão |
Exceções
A seguir está a organização das métricas de 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 métrico]
[métrica] = [valor métrico]
[exceção]\
[métrica] = [valor métrico]
[métrica] = [valor métrico]
Espaço reservado | Descrição |
---|---|
[GUID do mecanismo de depuração] | O GUID de um mecanismo de depuração que oferece suporte a exceções. |
[tipos de exceção] | Um título geral para a subchave que identifica a classe de exceções que podem ser manipuladas. Os nomes típicos são exceções C++, exceções Win32, exceções do Common Language Runtime e verificações nativas de tempo de execução. Esses nomes também são usados para identificar uma classe específica de exceção para o usuário. |
[exceção] | Um nome para uma exceção: por exemplo, _com_error ou Control-Break. Esses nomes também são usados para identificar uma exceção específica para o usuário. |
Requisitos
Esses arquivos estão localizados no diretório de instalação do SDK do Microsoft Visual Studio 2010 (por padrão, [unidade]\Arquivos de Programas\Microsoft Visual Studio 2010 SDK\).
Cabeçalho: includes\dbgmetric.h
Biblioteca: libs\ad2de.lib, libs\dbgmetric.lib