Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kode berikut menunjukkan cara memanggil fungsiSymFromName. Fungsi ini mengisi struktur SYMBOL_INFO. Karena panjangnya adalah variabel, Anda harus menyediakan buffer yang cukup besar untuk menahan nama yang disimpan di akhir struktur SYMBOL_INFO. Selain itu, anggota MaxNameLen harus disetel ke jumlah byte yang dicadangkan untuk nama tersebut. Dalam contoh ini, szSymbolName adalah buffer yang menyimpan nama simbol yang diminta. Contoh ini mengasumsikan bahwa Anda telah menginisialisasi pengolah simbol menggunakan kode di Menginisialisasi Pengolah Simbol.
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);
}
Jika aplikasi memiliki modul atau nama file sumber serta informasi nomor baris, aplikasi dapat menggunakan SymGetLineFromName64 untuk mengambil alamat kode virtual. Fungsi ini memerlukan penunjuk ke struktur IMAGEHLP_LINE64 untuk menerima alamat kode virtual. Perhatikan bahwa handler simbol hanya dapat mendapatkan informasi nomor baris jika opsi SYMOPT_LOAD_LINES telah diatur menggunakan fungsi SymSetOptions. Opsi ini harus diatur sebelum memuat modul. Parameter szModuleName berisi nama modul sumber; bersifat opsional dan dapat NULL. Parameter szFileName harus berisi nama file sumber, dan parameter dwLineNumber harus berisi nomor baris tempat alamat virtual akan diambil.
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);
}