Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обработчик символов загружает символы, когда вы вызываете функцию SymInitialize с параметром fInvadeProcess, установленным в TRUE, или когда вы вызываете функцию SymLoadModuleEx для указания модуля. В любом случае обработчик символов загружает символы или откладывает загрузку символов до тех пор, пока не будут запрошены символы, в зависимости от параметров, заданных функцией SymSetOptions.
Обработчик символов можно использовать для получения символьных сведений для любого модуля; Он не должен быть связан с процессом, указанным в вызове SymInitialize. Чтобы использовать произвольный модуль, укажите полный путь к изображению модуля в параметре ImageName. Вы можете использовать путь к любому исполняемому модулю с данными отладки (.exe, .dll, .drv, .sys, .scr, .cplили .com). Используйте параметр BaseOfDll, чтобы указать любой адрес нагрузки, а адреса символов будут основываться на этом адресе.
Возможно, не требуется хранить модуль символов, загруженный в течение длительности приложения. Чтобы освободить модуль символов из списка модулей обработчика символов, используйте функцию SymUnloadModule64. Эта функция освобождает память, выделенную для модуля символов. Чтобы использовать символы для этого модуля снова, необходимо вызвать функцию SymLoadModuleEx, даже если задан параметр отложенной загрузки символа.
Диагностика проблем с загрузкой символов
Чтобы увидеть все попытки загрузки символов, вызовите SymSetOptions с SYMOPT_DEBUG. Это приводит к вызову функции OutputDebugString с подробной информацией о поиске символов, например, о каталогах, в которых выполняется поиск, и сообщениях об ошибках. Если ваш код использует SymRegisterCallback64, DbgHelp вызовет вашу функцию обратного вызова вместо вызова OutputDebugString. Параметр ActionCode имеет значение CBA_DEBUG_INFO, а параметр CallbackData — это строка, которую можно отобразить.
Чтобы включить отображение выходных данных отладки в консоли без изменения исходного кода, задайте для переменной среды DBGHELP_DBGOUT значение, отличное отNULL, перед вызовом функции SymInitialize. Чтобы записать сведения в файл, задайте для переменной среды DBGHELP_LOG имя используемого файла журнала.
Обратите внимание, что эти функции следует использовать только при необходимости. Они могут замедлить загрузку символов модулей, содержащих много символов.