Freigeben über


Laden eines Symbolmoduls

Wenn eine Anwendung die SymInitialize--Funktion nicht aufruft, wobei der parameter fInvadeProcess auf TRUEfestgelegt ist, muss es Symbole für ein Modul laden, wenn sie erforderlich sind. Um ein Symbolmodul bei Bedarf zu laden, kann die Anwendung die SymLoadModuleEx--Funktion mit einem vollständigen Pfad zu einem Modulnamen aufrufen. Wenn das Modul geladen wird, lädt der Symbolhandler die Symbole entweder sofort oder verzögert die Last, je nachdem, welche Optionen mithilfe der SymSetOptions--Funktion festgelegt wurden.

Der folgende Code lädt ein Symbolmodul. Beachten Sie, dass vorausgesetzt wird, dass Sie den Symbol-Handler mithilfe des Codes in Initialisieren des Symbolhandlersinitialisiert haben.

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);
}

Beachten Sie, dass szImageName ein Pfad zu jedem ausführbaren Modul sein kann, das Debuginformationen enthält (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Außerdem ist dwBaseAddr- die Basisadresse des zu ladenden Symbolmoduls. Wenn dieser Wert 0 ist, erhält der Symbolhandler die Basisadresse aus dem angegebenen Symbolmodul.

Entladen eines Symbolmoduls