Dela via


Läser in en modul för symboler

Om ett program inte anropar funktionen SymInitialize med parametern fInvadeProcess inställd på TRUEmåste den läsa in symboler för en modul när de krävs. Om du vill läsa in en symbolmodul på begäran kan programmet anropa funktionen SymLoadModuleEx med en fullständig sökväg till ett modulnamn. När modulen läses in läser symbolhanteraren antingen in symbolerna omedelbart eller skjuter upp belastningen, beroende på vilka alternativ som anges med hjälp av funktionen SymSetOptions.

Följande kod läser in en symbolmodul. Observera att det förutsätter att du har initierat symbolhanteraren med hjälp av koden i Initiera symbolhanteraren.

TCHAR  szImageName[MAX_PATH] = TEXT("foo.dll");
DWORD64 dwBaseAddr = 0;

if (SymLoadModuleEx(hProcess,    // target process 
                    NULL,        // handle to image - not used
                    szImageName, // name of image file
                    NULL,        // name of module - not required
                    dwBaseAddr,  // base address - not required
                    0,           // size of image - not required
                    NULL,        // MODLOAD_DATA used for special cases 
                    0))          // flags - not required
{
    // SymLoadModuleEx returned success
}
else
{
    // SymLoadModuleEx failed
    DWORD error = GetLastError();
    printf("SymLoadModuleEx returned error : %d\n", error);
}

Observera att szImageName kan vara en sökväg till alla körbara moduler som har felsökningsinformation (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Dessutom är dwBaseAddr basadressen för symbolmodulen som ska läsas in. Om det här värdet är 0 hämtar symbolhanteraren basadressen från den angivna symbolmodulen.

tar bort en symbolmodul