初始化符號處理程式

下列程式代碼示範如何初始化符號處理程式。 SymSetOptions 函式會延遲符號載入,直到要求符號信息為止。 程式代碼會傳遞 SymInitialize 函式 bInvade 參數的 TRUE 值,以載入指定進程中每個模組的符號。 (此函式會呼叫 進程已對應到其位址空間的每個模組 SymLoadModule64 函式。

如果指定的進程不是稱為 SymInitialize 的進程,程式代碼會傳遞進程標識碼做為 SymInitialize 的第一個參數

NULL 指定為 SymInitialize 的第二個參數,表示符號處理程式應該使用預設搜尋路徑來尋找符號檔。 如需符號處理程式如何尋找符號檔或應用程式如何指定符號搜尋路徑的詳細資訊,請參閱 符號路徑

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