Compartir a través de


Método IDebugHostSymbols::CreateTypeSignature (dbgmodel.h)

El método CreateTypeSignature crea una firma que se puede usar para hacer coincidir un conjunto de tipos concretos con el módulo y el nombre de tipo. El formato de la cadena de firma de nombre de tipo es específico del lenguaje que se está depurando (y del host de depuración). Para C/C++, la cadena de firma es equivalente a una especificación de tipo NatVis. Es decir, la cadena de firma es un nombre de tipo donde se permiten caracteres comodín (especificados como *) para los argumentos de plantilla.

Sintaxis

HRESULT CreateTypeSignature(
  PCWSTR                  signatureSpecification,
  IDebugHostModule        *module,
  IDebugHostTypeSignature **typeSignature
);

Parámetros

signatureSpecification

Cadena de firma que identifica los tipos a los que se aplica esta firma. El formato de esta cadena es específico del idioma que se está depurando. Para C/C++, esto equivale a una especificación de tipo NatVis. Este es un nombre de tipo en el que se permiten caracteres comodín para argumentos de plantilla (especificados como *).

module

Si se especifica, solo los tipos contenidos en el módulo especificado coinciden con la firma. Si no se especifica, los tipos de cualquier módulo pueden coincidir con la firma.

typeSignature

El objeto de firma de tipo creado se devuelve aquí.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error.

Observaciones

de código de ejemplo

ComPtr<IDebugHost> spHost; /* get the host */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    // Create a type signature for MyTemplateType<*>
    ComPtr<IDebugHostTypeSignature> spSig1;
    if (SUCCEEDED(spSym->CreateTypeSignature(L"MyTemplateType<*>", 
                                             nullptr, 
                                             &spSig1)))
    {
        // spSig1 is a type signature which will match any concrete template 
        // type with a base name of MyTemplateType and *ANY* template arguments.
        // This is true regardless of the module in which the type is contained.
    }

    ComPtr<IDebugHostModule> spMyModule;
    if (SUCCEEDED(spSym->FindModuleByName(USE_CURRENT_HOST_CONTEXT, 
                                          L"MyModule.dll", 
                                          &spMyModule)))
    {
        // Create a type signature for MyTemplateType<*> within MyModule.dll.
        ComPtr<IDebugHostTypeSignature> spSig2;
        if (SUCCEEDED(spSym->CreateTypeSignature(L"MyTemplateType<*>", 
                                                 nullptr, 
                                                 &spSig2)))
        {
            // spSig2 is a type signature which will match any concrete 
            // template type with a base name of MyTemplateType and *ANY* 
            // template arguments that is within the particular MyModule.dll 
            // that's in the current UI context (e.g.: process) of the debugger.
            // This means if the host is debugging multiple processes
            // and you switch processes, a MyTemplateType<*> in an identically
            // named and versioned MyModule.dll will *NOT* match this signature.
        }
    }
}

diferencias en la coincidencia de módulos de símbolos en FindModuleByName, CreateTypeSignature y CreateTypeSignatureForModuleRange

FindModuleByName permitirá que el nombre del módulo pasado sea el nombre de imagen real del módulo, por ejemplo, My Module.dll, o el que puede hacer referencia a él en el motor del depurador (por ejemplo: MyModule o MyModule_<hex_base>).

Al llamar a CreateTypeSignatureForModuleRange y pasar un name/nullptr/nullptr creará una firma que coincidirá con cualquier módulo que coincida con ese nombre de cualquier versión.

El nombre del módulo pasado a las funciones CreateTypeSignature solo aceptará el nombre de imagen real del módulo (por ejemplo, MyModule.dll).

Al llamar a FindModuleByName y, a continuación, CreateTypeSignature con ese módulo creará una firma que coincidirá solo con la instancia concreta del módulo que se le ha pasado. Si hay dos copias de un módulo cargado (por ejemplo: ntdll en un proceso de 32 bits que se ejecuta en Windows de 64 bits), solo coincidiría con la instancia específica pasada. Tampoco coincidiría si ese archivo DLL se descargara y se volvera a cargar. La firma está asociada a una instancia específica de un módulo, tal como lo conoce el depurador.

Requisitos

Requisito Valor
encabezado de dbgmodel.h

Consulte también

interfaz IDebugHostSymbols

FindModuleByName

CreateTypeSignatureForModuleRange