Usando objetos de cliente

Para obter uma visão geral da função de objetos cliente na interação com o mecanismo do depurador, consulte Objetos do Cliente.

Em geral, os métodos de um cliente podem ser chamados somente do thread no qual o cliente foi criado. Normalmente, os métodos chamados do thread errado falharão imediatamente. A exceção notável a essa regra é o método CreateClient; esse método pode ser chamado de qualquer thread e retorna um novo cliente que pode ser usado no thread do qual foi chamado. Outras exceções são documentadas na seção de referência.

Uma cadeia de caracteres que descreve um objeto cliente é retornada pelo método GetIdentity ou pode ser gravada no fluxo de saída do mecanismo usando OutputIdentity.

COM Interfaces

A API do mecanismo de depurador contém várias interfaces COM como; eles implementam a interface IUnknown .

As interfaces descritas na seção Interfaces do Mecanismo de Depuração são implementadas pelo cliente (embora não necessariamente na versão mais recente). Você pode usar o método COM IUnknown::QueryInterface para obter cada uma dessas interfaces de qualquer uma das outras.

Os clientes implementam a interface COM IUnknown e a usam para manter contagens de referência e seleção de interface. No entanto, os clientes não são objetos COM registrados. O método IUnknown::AddRef é usado para incrementar a contagem de referência no objeto e o método IUnknown::Release é usado para diminuir a contagem de referência. Quando IUnknown::QueryInterface é chamado, a contagem de referência é incrementada, portanto, quando um ponteiro de interface do cliente não é mais necessário IUnknown::Release deve ser chamado para diminuir a contagem de referência.

A contagem de referência será inicializada para uma quando o objeto cliente for criado usando DebugCreate ou DebugConnect.

Consulte o SDK da Plataforma para obter mais informações sobre quando as contagens de referência devem ser incrementadas e decrementadas.

IUnknown::QueryInterface, DebugCreate e DebugConnect têm uma ID de interface como um de seus argumentos. Essa ID de interface pode ser obtida usando o operador __uuidof . Por exemplo:

IDebugClient * debugClient;
HRESULT Hr = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );

Importante As interfaces IDebug*, como a interface IDebugEventCallbacks , embora com like, não são APIs COM adequadas. Chamar essas interfaces do código gerenciado é um cenário sem suporte. Problemas como coleta de lixo e propriedade de threads levam à instabilidade do sistema quando as interfaces são chamadas com código gerenciado.