微软的Symbol Server可以帮我们把symbol信息存储在一个server上,那么当你debug一个程序的时候只要指定symbol server,VS就可以自动加载并且给你提供一个舒服的debug环境!Perforce等source control 代码也支持symbol server,当你双击一个callstack的frame的时候,VS能从p4上下载源代码并且给你打开,方便极了!
那么如何设置symbol server呢,终于找到个傻瓜教程:http://brockreeve.com/post/2009/10/23/Symbol-Server-Setup.aspx
以下为要点翻译:
第一步:在这里http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx下载Debuging Tools For Windows,并且安装。默认安装在这里:C:\Program Files\Debugging Tools for Windows (x86)
- srcsrv\ssindex.cmd: 这里是一堆perl的脚本,它的作用是把pdb里的源文件信息替换成版本管理软件的格式,这个过程叫做“indexing the pdb”,也就是说经过这个步骤以后,VS就能从P4上拿源文件了
- symstore.exe:这个函数把pdb和dll上传到一个准备给大家共享的文件夹上,debug的时候,symbol就是从这里来的
- srcsrv\srctool.exe: 这个的作用是检查pdb是不是indexed correctly
- srcsrv\srcsrv.doc:文档
第二步:Index the PDB。运行ssindex.cmd之前,修改srcsrv\srcsrv.ini,设置source control server的信息。接下来就运行ssindex.cmd:
- ssindex.cmd -system=p4 -symbols=C:\p4root\addon\Crystal\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug -source=C:\p4root\addon\Crystal\WindowsFormsApplication1\WindowsFormsApplication1 /debug
- -symbols是pdb所在
- -source是源文件所在
- \debug表示以verbose模式运行该命令
- 实际上,这个命令在本地针对每个源文件调用“p4 have”命令,然后把返回的p4路径和版本信息写到pdb里
- 使用srctool c:\p4root\addon\Crystal\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.pdb就能看到改动的结果。(本命令使用了p4 print命令)
第三步:Add to symbols store。使用symstore.exe
- symstore add /r /f C:\p4root\addon\Crystal\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug /s C:\Symbols /t app
- /s 指明symbol store的root folder
- symbol store就是一个文件夹而已,**.pdb文件夹里存的是以GUID命名的文件。系统内部通过guid来将exe和pdb定位。
- 想要看更详细信息,你可以在exe或dll上执行dumpbin /headers命令,看看输出是什么
第四步:debug的时候使用symbol server吧
- Tools -> Options: Debugging->Enable Source Server Support勾上
- Tools -> Options: Debugging->Symbols->设置symbol server和本地cache。(注意,本地Cache要放在一个你有权限访问的地方,否则VS会默默地招不到symbol)
- 接下来就用VS attach到进程,增加断点吧,一切都ok了!
最后,文中还提到了怎么设置silverlight的symbol server,这里就复制粘贴一下:
- If you are wanting to do this with silverlight you will have to add the registry key below for every machine that wants to pull symbols from the symbol store.
- HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\AD7Metrics\Engine{00000000-0000-0000-0000-000000000000}
- Set RequireFullTrustForSourceServer to 0 (REG_DWORD)
- I spent a week with Microsoft support on this one.