我试图使用 SymEnumSourceFiles 来获取调试模块中的文件名。但是作为回调函数中的参数的文件名似乎不完整。例如,一个名为“c:\program files\test\test.cpp”的文件只在 PSOURCEFILE 类型参数的 FileName 部分显示“c:\program fi”,这是非常连贯的。这是我的代码:
struct foo
{
static BOOL CALLBACK run( PSOURCEFILE pSourceFile, PVOID UserContext)
{
static TCHAR szFileName[MAX_PATH] = _T("");
if (_tcscmp(szFileName, pSourceFile->FileName))
{
_tcscpy(szFileName, pSourceFile->FileName);
}
return TRUE;
}
};
HANDLE hCurrentProcess = GetCurrentProcess();
SymInitialize(hCurrentProcess, NULL, FALSE);
DWORD64 BaseOfDll = SymLoadModule64(hCurrentProcess,
NULL,
(LPCSTR)_bstr_t(lpszFile),
NULL,0,0);
if(!SymEnumSourceFiles(hCurrentProcess, BaseOfDll, NULL, foo::run, (PVOID)pCallBack))
{
ATLTRACE(_T(__FUNCTION__) _T(" error:0x%x\n"), GetLastError());
}
SymUnloadModule64(hCurrentProcess, BaseOfDll);
SymCleanup(hCurrentProcess);
谁能告诉我哪里出错了?PS。当我简单地将 SymEnumSourceFiles 替换为 SymEnumLines 并更改回调函数时,我得到的文件名是正确的。