Compartilhar via


Implementing the Functions Required for a Debugger Extension DLL

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Este tópico descreve como para implementar as funções que são exigido para um personalizado extensão depurador DLL. Essas funções são exigido por Platform Builder para carregar e descarregar o DLL como uma extensão depurador.

Antes de começar a implementar essas funções, você deve completo as etapas Creating a Debugger Extension DLL Project.

Para implementar as funções exigido para uma extensão depurador DLL

  1. Em Visual Studio 2005, em Gerenciador de Soluções, expansão Arquivos de origeme em seguida, clique duplo hello_ext.cpp.

  2. Adicionar uma implementação de WinDbgExtensionDllInit que corresponda a seguinte função assinatura de wdbgexts_ce.h:

    typedef VOID
    (WDBGAPI*PWINDBG_EXTENSION_DLL_INIT)(
        PWINDBG_EXTENSION_APIS lpExtensionApis,
        USHORT                 MajorVersion,
        USHORT                 MinorVersion
    );
    

    Platform Builder chama essa função quando ele carrega a extensão depurador. O PWINDBG_EXTENSION_APIS estrutura contém funções callback para as APIs. Observe que essa estrutura pode alteração para cada versão, verificar caso seu nTamanho membro.

  3. Próximo, adicionar uma implementação de WinDbgExtensionDllShutdown que corresponda a seguinte função assinatura:

    void WDBGAPI WinDbgExtensionDllShutdown( void );
    

    Platform Builder chama essa função antes ele descarrega a extensão depurador. Na implementação de função, adicionar codificar que deve ser chamado antes que essa extensão depurador seja descarregado, such as encerrando segmentos que é iniciado, ou fechando aberto alças.

  4. Próximo, adicionar uma implementação de ExtensionApiVersion que corresponda a seguinte função assinatura:

    typedef LPEXT_API_VERSION
    (WDBGAPI*PWINDBG_EXTENSION_API_VERSION)(
        VOID
    );
    

    Essa função retorna um ponteiro para um EXT_API_VERSION estrutura, que é definida em wdbgexts_ce.h as follows:

    typedef struct EXT_API_VERSION {
        USHORT  MajorVersion;
        USHORT  MinorVersion;
        USHORT  Revision;
        USHORT  Reserved;
    } EXT_API_VERSION, *LPEXT_API_VERSION;
    

Para adicionar o comando de saudação para a extensão depurador DLL

  1. Em hello_ext.cpp, usar o DECLARE_API macro para adicionar um comando chamado Saudação.

    Observação

    O nome deste comando deve ser idêntico ao nome que você desejar usar para o comando depurador.

  2. (Opcional) Personalize a implementação adicionando funcionalidade adicional. Para obter mais informações sobre a funcionalidade que você pode adicionar, consulte Debugger Extension Functions.

Após concluir essas etapas, você estará pronto para criar um arquivo .def para exportar as funções que você implementou neste tópico.

Example

O seguinte codificar mostra uma raiz para implementar o exigido funções para uma extensão depurador DLL:

// hello_ext.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"

#ifdef _MANAGED
  #pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
            )
{
    return TRUE;
}

#ifdef _MANAGED
  #pragma managed(pop)
#endif

USHORT                 SavedMajorVersion;
USHORT                 SavedMinorVersion;
EXT_API_VERSION ApiVersion = { 3, 5, EXT_API_VERSION_NUMBER, 0 };

void WDBGAPI WinDbgExtensionDllInit(
        PWINDBG_EXTENSION_APIS lpExtensionApis,
        USHORT MajorVersion,
        USHORT MinorVersion)
{
    // Copy lpExtensionApis to ExtensionAPis so that extension
    // functions can 
    // access the Platform Builder Debugger Extension API.
    
ExtensionApis = *lpExtensionApis;

    SavedMajorVersion = MajorVersion;
    SavedMinorVersion = MinorVersion;

    // Add code that should run after the Extension DLL is loaded 
    // into Platform Builder.
}

LPEXT_API_VERSION ExtensionApiVersion()
{
    return &ApiVersion;
}

DECLARE_API(Hello)
{
     dprintf("HELLO_EXT: Hello!\n");
     // Implement debugger functionality by calling the  
     // Debugger Extension Functions
}

See Also

Concepts

How to Create and Debug a Debugger Extension
Debugger Extension Functions