我在网络上有一个备用服务器,我希望拥有所有构建符号。我已经知道如何在我的本地开发系统上设置符号缓存,并将我的调试器(例如Windbg)指向符号文件路径'中的路径。我假设我可以对网络上具有自己的符号缓存的另一个系统(例如\\ host \ symbols)执行相同的操作。
我在目录上设置了服务器并启用了文件共享,因此我可以通过Windows资源管理器远程访问它。但是,当我尝试在WinDbg中指向它时,它似乎没有在那里拾取符号。
符号文件路径设置如下:
srv*\\192.168.1.20\symbolpath*http://msdl.microsoft.com/download/symbols
似乎我没有在服务器上正确配置它 - 是否有一个步骤可能会丢失?
答案 0 :(得分:14)
设置符号服务器和/或符号网络共享时需要了解几件事。
在符号路径中从头到尾搜索符号,即在符号路径C:\a;C:\b
中,它将首先查看C:\a
,然后查看C:\b
。虽然这并不重要,但它会影响性能。如果您有自己的符号,请始终将它们放在第一位,这样您就可以将HTTP往返保存到Microsoft服务器。
有三种符号存储类型:
您可以使用三种类型的符号存储,不应将它们混合在一个目录中:
<filename>.pdb\<hash>\<filename>.pdb
。您可以从现有的空(0字节)pingme.txt
文件和000Admin
文件夹中识别出2层符号存储。不要删除它们。<fi>\<filename>\<hash>\<filename>.pdb>
。您从空(0字节)index2.txt
文件中识别出3层符号存储。不要删除它。三层商店应该可以提高性能。您可以使用WinDbg附带的symstore.exe
将符号从0层商店放到2层或3层商店。
您可以使用convertstore.exe
将2层存储转换为3层存储。如果出现错误,请参阅我的文章Convertstore Errors。
您设置的不是符号服务器,它是服务器符号存储,因为您使用(并且想要使用)网络共享,而不是HTTP Web服务器。以下是设置它的步骤:
symstore add /3 /f "Filename.pdb" /s "\\server\symbols" /t "Title"
;如果您在本地添加符号,请使用/s "C:\share\symbols"
。对要添加的所有PDB文件版本重复步骤3。您还可以使用*.pdb
之类的通配符。理想情况下,您将该步骤集成到构建过程中。
出于性能原因,开发人员希望在本地缓存您自己的符号以及Microsoft符号。因此,让我们首先创建这样一个本地缓存:
.sympath cache*C:\Symbols
我通常让缓存文件夹由NTFS压缩,因为符号压缩得很好。
接下来,让我们首先找到自己的符号,以避免往返Microsoft:
.sympath+ \\server\symbols
最后,尝试从Microsoft下载其他所有内容:
.symfix+
如果您对WinDbg工作区有所了解,可以将符号路径设置保存在工作区中,这样就无需在每个调试会话中键入所有这些内容。不幸的是,如果你将它全部放在由分号分隔的一行中(我不太明白为什么),它就不起作用了,但你现在可以输入.sympath
并复制结果。它应该是
cache*c:\symbols;\\server\symbols;SRV*http://msdl.microsoft.com/download/symbols
我现在无法重现这一点,但我记得有些问题。原因是:WinDbg在访问网络共享时不会要求凭据。解决方法是:如果您没有收到\\server\symbols
的符号,请在Windows资源管理器中打开该网络共享。资源管理器将要求提供凭据,它们将由Windows缓存,因此可由WinDbg隐式使用。