Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O código a seguir demonstra como chamar a função SymFromName. Esta função preenche uma estrutura SYMBOL_INFO. Como o nome é variável em comprimento, você deve fornecer um buffer que seja grande o suficiente para armazenar o nome armazenado no final da estrutura SYMBOL_INFO. Além disso, o membro MaxNameLen deve ser atribuído ao número de bytes reservados para o nome. Neste exemplo, szSymbolName é um buffer que armazena o nome do símbolo solicitado. O exemplo pressupõe que você tenha inicializado o manipulador de símbolos usando o código em Initializing the Symbol Handler.
TCHAR szSymbolName[MAX_SYM_NAME];
ULONG64 buffer[(sizeof(SYMBOL_INFO) +
MAX_SYM_NAME * sizeof(TCHAR) +
sizeof(ULONG64) - 1) /
sizeof(ULONG64)];
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
_tcscpy_s(szSymbolName, MAX_SYM_NAME, TEXT("WinMain"));
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYM_NAME;
if (SymFromName(hProcess, szSymbolName, pSymbol))
{
// SymFromName returned success
}
else
{
// SymFromName failed
DWORD error = GetLastError();
_tprintf(TEXT("SymFromName returned error : %d\n"), error);
}
Se um aplicativo tiver um nome de módulo ou arquivo de origem, bem como informações de número de linha, ele pode usar SymGetLineFromName64 para recuperar um endereço de código virtual. Para receber o endereço de código virtual, esta função requer um ponteiro para uma estrutura IMAGEHLP_LINE64. Observe que o manipulador de símbolos pode recuperar informações de número de linha somente se a opção SYMOPT_LOAD_LINES estiver definida, usando a função SymSetOptions. Esta opção deve ser definida antes de carregar o módulo. O parâmetro szModuleName contém o nome do módulo de origem; é opcional e pode ser NULL. O parâmetro szFileName deve conter o nome do arquivo de origem e o parâmetro dwLineNumber deve conter o número da linha para o qual o endereço virtual será recuperado.
TCHAR szModuleName[MAX_PATH];
TCHAR szFileName[MAX_PATH];
DWORD dwLineNumber;
LONG lDisplacement;
IMAGEHLP_LINE64 line;
SymSetOptions(SYMOPT_LOAD_LINES);
line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
_tcscpy_s(szModuleName, MAX_PATH, TEXT("MyApp"));
_tcscpy_s(szFileName, MAX_PATH, TEXT("main.c"));
dwLineNumber = 248;
if (SymGetLineFromName64(hProcess, szModuleName, szFileName,
dwLineNumber, &lDisplacement, &line))
{
// SymGetLineFromName64 returned success
}
else
{
// SymGetLineFromName64 failed
DWORD error = GetLastError();
_tprintf(TEXT("SymGetLineFromName64 returned error : %d\n"), error);
}