初始化符号处理程序

以下代码演示如何初始化符号处理程序。 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;
}