기호 처리기 초기화

다음 코드는 기호 처리기를 초기화하는 방법을 보여 줍니다. SymSetOptions 함수는 기호 정보가 요청될 때까지 기호 로드를 연기합니다. 이 코드는 SymInitialize 함수의 bInvade 매개 변수에 대해 TRUE 값을 전달하여 지정된 프로세스의 각 모듈에 대한 기호를 로드합니다. (이 함수는 프로세스가 해당 주소 공간에 매핑한 각 모듈에 대해 SymLoadModule64 함수를 호출합니다.)

지정된 프로세스가 SymInitialize를 호출한 프로세스가 아닌 경우 코드는 프로세스 식별자를 SymInitialize의 첫 번째 매개 변수로 전달합니다.

SymInitialize의 두 번째 매개 변수로 NULL을 지정하면 기호 처리기가 기본 검색 경로를 사용하여 기호 파일을 찾아야 함을 나타냅니다. 기호 처리기가 기호 파일을 찾는 방법이나 애플리케이션이 기호 검색 경로를 지정하는 방법에 대한 자세한 내용은 기호 경로를 참조하세요.

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