In addition to Craig W. s correct answer:
besides the sourceControl System (such as svn/git) you als should also use a build system to archive any builds.
A nice Build System is Jenkins, it's quiet a easy to understand build system with all features i expect. if u distribut your software you login to jenkis and hit "build now". Jenkins then checks out the current version from svn/git and builds your software (using a batch) and saves all Files including the debug/symbol files. jenkins should increase the build number of the binary each time and the build number should be set into the binary file (dll and exe). On a crash u then see the version in the event-viewer and can get all the files from the crashed version including the source.
I also would suggest to write the jenkins build number into the binary. thus you always can logonto jenkins select the build number and you then get all the debug files and also see in the logs what svn version it was built from (thus u can also checkout the proper sourcecode). for Versioning dll or exe files you can use (in .net edit the config file with a script instead): http://www.codeproject.com/KB/install/VerPatch.aspx?msg=3207401 and integrate it in the build batch.
And here you find the jenkins: https://jenkins-ci.org/