none
Implementation d'un Expression Evaluator pour une classe abstraite RRS feed

  • Question

  • Bonjour,

    je cherche comment faire pour coder un expression evaluator qui permettrait de visualiser le contenu de variables de classe heritant dune classe abstraite.

    Je fais un add-in au debogueur Visual Studio (9), sous forme de fichier .dll appele grace a autoexp.dat:

     

    I2dBufferAccessor=$ADDIN(_visual_addin.dll,_Debugger@28)
    Le probleme vient au moment de la recuperation des donnees. En effet, je ne peux pas instancier une entite de I2dBufferAccessor, puisque c'est une classe abstraite. (je ne peux pas connaitre a l'avance la classe fille). Du coup, impossible de faire un
    pHelper->ReadDebuggeeMemory(pHelper,dwAddress,sizeof
    (I2dBufferAccessor),accessor,&nGot)
    
    J'ai essaye cela:
    I2dBufferAccessor* accessor = reinterpret_cast
    <I2dBufferAccessor*>(pHelper->GetRealAddress(pHelper));
    
    Mais manifestement cela ne fonctionne pas. Cela compile bien, mais en lancant un debogage sur FilleI2dBufferAccessor (classe heritant de I2dBufferAccessor), la previsualisation affiche {...}, et j'ai repere que l'exception dans ma dll arrive quand j'essaie d'acceder a une methode de accessor. (accessor.width() en l'occurence)

     

    Merci d'avance pour votre aide.

    Maxime

     

    PS: Extrait de mon code:

     

    extern "C" __declspec(dllexport) HRESULT WINAPI Debugger( DWORD dwAddress, DEBUGHELPER *pHelper,
                                 int nBase, BOOL bUniStrings, char *pResult, size_t max,
                                 DWORD reserved )
         {
          DWORD nGot = 0;
          I2dBufferAccessor* accessor = reinterpret_cast<I2dBufferAccessor*>(pHelper->GetRealAddress(pHelper));
          display_image(*accessor);
          return S_OK;
         }
    
    
    //extrait de display_image
    int display_image( const vlam::ia::I2dBufferAccessor& accessor )
          {
            int a = accessor.width(); //apparemment c'est cette ligne qui empeche l'add-in de fonctionner
            /*.....*/
          }

     

     

    • Modifié Maxou83 mardi 1 juin 2010 19:25 Precision code
    mardi 1 juin 2010 18:44

Toutes les réponses