关于用dbghelp.dll捕获到错误时,得到堆栈调用的函数的名字的有关问题

关于用dbghelp.dll捕获到异常时,得到堆栈调用的函数的名字的问题
C/C++ code
STACKFRAME64 sf;
    memset(&sf, 0, sizeof(sf));
    DWORD64 eip, esp, ebp;
    eip= pExcPointer->ContextRecord->Eip;
    esp = pExcPointer->ContextRecord->Esp;
    ebp = pExcPointer->ContextRecord->Ebp;
    //初始化stackframe结构
    sf.AddrPC.Offset = eip;
    sf.AddrPC.Mode = AddrModeFlat;
    sf.AddrStack.Offset = esp;
    sf.AddrStack.Mode = AddrModeFlat;
    sf.AddrFrame.Offset = ebp;
    sf.AddrFrame.Mode = AddrModeFlat;
    DWORD dwMachineType = IMAGE_FILE_MACHINE_I386;
    HANDLE hProcess = GetCurrentProcess();
    HANDLE hThread = GetCurrentThread();
    BOOL bRet = SymInitialize(hProcess, NULL, NULL);

    memset(buf, 0, 256);
    //WideCharToMultiByte(CP_ACP, 0, szModuleName, wcslen(szModuleName) + 1, buf, 256, NULL, NULL);
    PLOADED_IMAGE pLoadImage;
    pLoadImage = ImageLoad(szModuleName, NULL);
    DWORD dwLoad = SymLoadModule(hProcess, NULL, szModuleName,NULL, 0, pLoadImage->SizeOfImage);
    while(1)
    {
        //获取下一栈帧
        if(!StackWalk64(dwMachineType,
            hProcess, 
            hThread, 
            &sf, 
            pExcPointer->ContextRecord,
            0,
            (PFUNCTION_TABLE_ACCESS_ROUTINE64)SymFunctionTableAccess,
            (PGET_MODULE_BASE_ROUTINE64)SymGetModuleBase,
            0))
            break;
                       ......




接下来,为了得到堆栈调用的函数的名字,网上介绍的方法都是用SymFromAddr这个函数,但是这个函数是需要编译时产生的pdb文件的,
我很想知道,有没有什么办法不依赖PDB文件,而知道异常发生时,堆栈里面的函数名字以及其所在的程序或者动态库.

------解决方案--------------------
那函数名字什么的从哪里来...
------解决方案--------------------
探讨
引用:

那函数名字什么的从哪里来...

堆栈里面应该保存有的吧?

------解决方案--------------------
PDB符号文件记录调试信息,出错时需要根据PDB才能转换成对应调试信息,还没听说过DUMP能脱离PDB文件。
------解决方案--------------------
没有pdb的话只能看汇编代码