Setting up symbol store?

Hello,

I’m trying to setup a symbol store to house all the .pdb files.

I’ve been populating the symbol store with the command WinDbg from WinSDK:
symstore.exe" add /r /f c: rees\rs1\Engine\Binaries /s I:\stuff\unreal_symbols /t “Unreal Engine 4.4” /v “4.4” /c “From Epic Perforce”

It appears that the symbol store gets populated

On a machine that has the .pdb’s stripped from Binaries directory, I have set the environment variable:
_NT_SYMBOL_PATH=srvd:\SymbolsI:\stuff\unreal_symbols

I’ve also updated BaseEngine.ini according to:
https://udn.unrealengine.com/docs/ue4/INT/Programming/Development/Tools/SymbolDebugger/index.html
where
LocalSymbolStore=I:\stuff\unreal_symbols

When a crash occurs, the Unreal Engine 4 Crash Reporter comes up, but it says
“You do not have any debugging symbols required to display the callstack for this crash.”

If I copy all the .pdb’s into the Binaries directory, then I get a callstack in Unreal Engine 4 Crash Reporter.

What are the settings I should use to get the symbol store working with UE4

Thanks,

Apologies for bumping such an old thread, did you or does anyone else have a solution to this? I have an identical issue with my setup.

Kind regards,
KamikazeXeX

I had similar issues. The solution was A) Copy symsrv.dll next to dbghelp.dll (see c++ - SymGetSymFromAddr64 works but SymGetLineFromAddr64 fails with error code 487 - Stack Overflow), B) Under /Script/UnrealEd.CrashReporterSettings in the relevant ini file, specify my symbol server path via “RemoteStorage” and my local cache path via “DownstreamStorage”.

I hope this helps. I’m not familiar with “LocalSymbolStore”.

Regarding B… I actually didn’t like duplicating my symbol server paths in that ini file, so I ended up modifying GetRemoteStorage() in WindowsPlatformStackWalk.cpp to do the following, in place of “else return FString()”:



FString SymbolPathEnvironmentVariable;
{
     wchar_t* RawSymbolPathEnvironmentVariable = nullptr;
     size_t Length;
     errno_t Error = _wdupenv_s(&RawSymbolPathEnvironmentVariable, &Length, L"_NT_SYMBOL_PATH");
     if (Error == 0 && RawSymbolPathEnvironmentVariable != nullptr && Length > 0)
     {
            SymbolPathEnvironmentVariable.Append(RawSymbolPathEnvironmentVariable);
      }
      free(RawSymbolPathEnvironmentVariable);
}
return SymbolPathEnvironmentVariable;