I have a spare server on the network that I\'d like to have host all of our build symbols. I already know how to set up a symbol cache on my local development system and poi
There are a several things to know when setting up a symbol server and/or symbol network share.
Symbols are searched in the symbol path from the beginning to the end, i.e. in the symbol path C:\a;C:\b
, it will first look in C:\a
and then in C:\b
. While this does not really matter, it influences performance a lot. If you have your own symbols, always put them first, so you're saving the HTTP round-trip to the Microsoft server.
There are three symbol store types:
You can have three types of symbol stores and you should not mix them in a single directory:
<filename>.pdb\<hash>\<filename>.pdb
. You recognize a 2-tier symbol store from an existing empty (0 byte) pingme.txt
file and a 000Admin
folder. Don't delete those.<fi>\<filename>\<hash>\<filename>.pdb>
. You recognize a 3-tier symbol store from the empty (0 byte) index2.txt
file. Don't delete it. The 3-tier store is supposed to increase performance.You can put symbols from a 0-tier store to a 2- or 3-tier store using symstore.exe
which comes with WinDbg.
You can convert a 2-tier store into a 3-tier store using convertstore.exe
. In case of errors, see my article Convertstore Errors.
What you have set up is not a symbol server, it is a server symbol store, because you use (and want to use) a network share, not a HTTP web server. The following are the steps to set it up:
symstore add /3 /f "Filename.pdb" /s "\\server\symbols" /t "Title"
if you want to add symbols from a different machine or use /s "C:\share\symbols"
if you add them locally.Repeat step 3 for all versions of PDB files you like to add. You can also use wildcards like *.pdb
. Ideally you integrate that step into your build process.
For performance reasons, developers want to cache your own symbols from the network locally as well as the Microsoft symbols. Therefore, let's create such a local cache first:
.sympath cache*C:\Symbols
I typically let the cache folder be compressed by NTFS, because symbols compress quite well.
Next, let's find own symbols first to avoid the round-trip to Microsoft:
.sympath+ \\server\symbols
Finally, try to download everything else from Microsoft:
.symfix+
If you learn a bit about WinDbg Workspaces, you can save the symbol path setting in a workspace so you needn't type all this in each debugging session. Unfortunately it does not work if you put it all in one line separated by semicolon (I don't really understand why), but you can type .sympath
now and copy the result. It should be
cache*c:\symbols;\\server\symbols;SRV*http://msdl.microsoft.com/download/symbols
I could not reproduce this now, but I remember some problems. The reason was: WinDbg will not ask for credentials when accessing the network share. The workaround is: if you don't receive symbols from \\server\symbols
, open that network share in Windows Explorer. Explorer will ask for credentials and they will be cached by Windows and thus be used by WinDbg implicitly.