SymEnumSourceFiles获得不完整的文件名

SymEnumSourceFiles get incomplete file names

本文关键字:文件名 SymEnumSourceFiles      更新时间:2023-10-16

我正在字符串中使用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%xn"), GetLastError());
    }
    SymUnloadModule64(hCurrentProcess, BaseOfDll);
    SymCleanup(hCurrentProcess);

有人能告诉我哪里错了吗?PS。当我简单地用SymEnumLines替换SymEnumSourceFiles并更改回调函数时,我得到的文件名是正确的。

SymEnumSymbols曾经有一个错误,其中符号名称不是以零结尾的,也许这一个是相关的。复制文件名(pSourceFile->FileName[0] = 0;)后,请尝试将其清零。

尝试ANSI版本的SymEnumSourceFiles。SymEnumSourceFilesW函数中似乎有一个错误。