Поделиться через


Функция SymGetLineFromAddr (dbghelp.h)

Находит исходную строку для указанного адреса.

Синтаксис

BOOL IMAGEAPI SymGetLineFromAddr(
  [in]  HANDLE         hProcess,
  [in]  DWORD          dwAddr,
  [out] PDWORD         pdwDisplacement,
  [out] PIMAGEHLP_LINE Line
);

Параметры

[in] hProcess

Дескриптор процесса, который изначально был передан в функцию SymInitialize .

[in] dwAddr

Адрес, по которому должна находиться строка. Необязательно, чтобы адрес был на границе строки. Если адрес отображается после начала строки и до конца строки, строка найдена.

[out] pdwDisplacement

Смещение в байтах от начала строки или ноль.

[out] Line

Указатель на структуру IMAGEHLP_LINE64 .

Возвращаемое значение

Если функция выполняется успешно, возвращается значение TRUE.

Если функция завершается сбоем, возвращается значение FALSE. Чтобы получить расширенные сведения об ошибке, вызовите Метод GetLastError.

Комментарии

Вызывающий объект должен правильно выделить буфер строки и заполнить необходимые элементы структуры IMAGEHLP_LINE64 перед вызовом SymGetLineFromAddr64.

Эта функция возвращает указатель на буфер, который может повторно использоваться другой функцией. Поэтому не забудьте немедленно скопировать данные, возвращенные в другой буфер.

Все функции DbgHelp, такие как эта, являются однопоточными. Поэтому вызовы из нескольких потоков к этой функции, скорее всего, приведут к непредвиденному поведению или повреждению памяти. Чтобы избежать этого, необходимо синхронизировать все параллельные вызовы из нескольких потоков в эту функцию.

Чтобы вызвать версию этой функции в Юникоде, определите DBGHELP_TRANSLATE_TCHAR. SymGetLineFromAddrW64 определяется следующим образом в Dbghelp.h.

BOOL
IMAGEAPI
SymGetLineFromAddrW64(
    _In_ HANDLE hProcess,
    _In_ DWORD64 dwAddr,
    _Out_ PDWORD pdwDisplacement,
    _Out_ PIMAGEHLP_LINEW64 Line
    );

#ifdef DBGHELP_TRANSLATE_TCHAR
 #define SymGetLineFromAddr64   SymGetLineFromAddrW64
#endif

Эта функция заменяет функцию SymGetLineFromAddr . Дополнительные сведения см. в разделе Обновленная поддержка платформы. SymGetLineFromAddr определяется следующим образом в Dbghelp.h.

#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetLineFromAddr SymGetLineFromAddr64
#define SymGetLineFromAddrW SymGetLineFromAddrW64
#else
BOOL
IMAGEAPI
SymGetLineFromAddr(
    _In_ HANDLE hProcess,
    _In_ DWORD dwAddr,
    _Out_ PDWORD pdwDisplacement,
    _Out_ PIMAGEHLP_LINE Line
    );

BOOL
IMAGEAPI
SymGetLineFromAddrW(
    _In_ HANDLE hProcess,
    _In_ DWORD dwAddr,
    _Out_ PDWORD pdwDisplacement,
    _Out_ PIMAGEHLP_LINEW Line
    );
#endif

Примеры

Пример см. в разделе Получение сведений о символах по адресу.

Требования

Требование Значение
Целевая платформа Windows
Header dbghelp.h
Библиотека Dbghelp.lib
DLL Dbghelp.dll
Распространяемые компоненты DbgHelp.dll 5.1 или более поздней версии

См. также раздел

Функции DbgHelp

IMAGEHLP_LINE64

SymGetLineFromName64

SymInitialize