Udostępnij przez


Inicjowanie programu obsługi symboli

Poniższy kod pokazuje, jak zainicjować procedurę obsługi symboli. Funkcja SymSetOptions opóźnia ładowanie symboli do momentu, gdy zostaną zażądane informacje o tych symbolach. Kod ładuje symbole dla każdego modułu, w określonym procesie, przekazując wartość TRUE dla bInvade parametru SymInitialize. (Ta funkcja wywołuje funkcję SymLoadModule64 dla każdego modułu, który został zamapowany do przestrzeni adresowej).

Jeśli określony proces nie jest tym, który wywołał SymInitialize, kod przekazuje identyfikator procesu jako pierwszy parametr funkcji SymInitialize.

Określenie null jako drugiego parametru SymInitialize wskazuje, że program obsługi symboli powinien używać domyślnej ścieżki wyszukiwania do lokalizowania plików symboli. Aby uzyskać szczegółowe informacje o tym, jak program obsługi symboli lokalizuje pliki symboli lub jak aplikacja może określić ścieżkę wyszukiwania symboli, zobacz Ścieżki symboli.

DWORD  error;
HANDLE hCurrentProcess;
HANDLE hProcess;

SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);

hCurrentProcess = GetCurrentProcess();

if (!DuplicateHandle(hCurrentProcess, hCurrentProcess, hCurrentProcess, &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
    // DuplicateHandle failed
    error = GetLastError();
    printf("DuplicateHandle returned error : %d\n", error);
    return FALSE;
}

if (!SymInitialize(hProcess, NULL, TRUE))
{
    // SymInitialize failed
    error = GetLastError();
    printf("SymInitialize returned error : %d\n", error);
    return FALSE;
}