Use Symbol Filtering to get symbols you care about from your server instead of getting the kitchen sink
One of the most annoying things about working with performance traces is that they include information about everything in the system. That's also one of the great things.
However, most of the time, for most problems, there are very few things you are specifically looking for. Like in my case I'm looking at IE problems and I already know all the IE dlls. If the dude happens to have 82 other programs running and idle I do not need to download their symbols. There is no easy way to specify the symbols I care about so I wrote this local symbol proxy. Beware it's slightly cheesy but it's super helpful because you neither have to download or cache symbols you don't care about. I haven't tested it extensively but it works for me. If you find bugs, maybe you can stick it on a github somewhere and start maintaining it for reals. I feel like I've done my part :)
The source code is here.
As usual it comes with no warrantee and no rights are implied etc. It's just a quick sample I threw together.
To use it, create your own symfilter.txt file with one pattern on each line. It expects to find in the current directory when you start it. Then run the thing. Any requests that do not contain your strings will get a 404 return. Everything else will be forwarded to the indicated server for resolution.
If your server path used to be
_NT_SYMBOL_PATH=srv*https://someserver/somepath
change it to
_NT_SYMBOL_PATH=srv*https://localhost:8080/someserver|somepath
The bit before the | is used to find the actual server, the request will be changed to be https://someserver/somepath/...whatever
You could imagine having several configuration files listening on several ports but I leave that as an exercise to the reader. This thing saves me a ton of time by not fetching symbols I don't need.
Enjoy :)
from your server
Comments
Anonymous
December 08, 2014
Nice. You could also use Fiddler Core. It's not as fun to write, but supports a lot of options and extra scripting. www.telerik.com/.../fiddlercoreAnonymous
December 08, 2014
Actually Justin suggested it but I was mostly done by then :)Anonymous
December 08, 2014
Another option would be to create a symsrv.ini file. msdn.microsoft.com/.../ms681416(v=vs.85).aspxAnonymous
December 09, 2014
The comment has been removedAnonymous
December 09, 2014
What I'd really like to see is _NT_SYMBOL_INCLUDE=x*;y*;z* and _NT_SYMBOL_EXCLUDE=a*;b;c;etc That seems super easy to do in the base leaving the server out of it. Because really it's a context specific decision. That's why I designed my thing to run local, so you can change it at whim.Anonymous
December 09, 2014
The comment has been removedAnonymous
December 10, 2014
All native Images *.ni.pdb should be excluded by default since they will never be on any symbol server but take a lot of time if you are working with a large Ngenned code base.Anonymous
January 05, 2015
Hey, FiddlerCore is lots of fun to program in! :-) It'll also properly handle things like redirects, and chunked encoding. The Return404 function should have a Content-Length: 0 header to allow for proper connection reuse.Anonymous
January 05, 2015
The comment has been removed