yka*_*kay 9 c++ windbg debug-symbols visual-studio
我在网络上有一个备用服务器,我希望拥有所有构建符号.我已经知道如何在我的本地开发系统上设置符号缓存,并将我的调试器(例如Windbg)指向"符号文件路径"中的该路径.我假设我可以对网络上具有自己的符号缓存的另一个系统(例如\\ host\symbols)执行相同的操作.
我在目录上设置了服务器并启用了文件共享,因此我可以通过Windows资源管理器远程访问它.但是,当我尝试在WinDbg中指向它时,它似乎没有在那里拾取符号.
符号文件路径设置如下:
srv*\\192.168.1.20\symbolpath*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)
好像我在服务器上没有正确配置它 - 是否有一个我可能会丢失的步骤?
Tho*_*ler 16
设置符号服务器和/或符号网络共享时,需要了解几件事.
在符号路径中从头到尾搜索符号,即在符号路径中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层符号存储.不要删除它.三层商店应该可以提高性能.您可以将符号从0层存储放置到symstore.exe
WinDbg附带的2层或3层存储中.您可以使用将2层商店转换为3层商店convertstore.exe
.如果有错误,请参阅我的文章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
Run Code Online (Sandbox Code Playgroud)
我通常让缓存文件夹由NTFS压缩,因为符号压缩得很好.
接下来,让我们首先找到自己的符号,以避免往返Microsoft:
.sympath+ \\server\symbols
Run Code Online (Sandbox Code Playgroud)
最后,尝试从Microsoft下载其他所有内容:
.symfix+
Run Code Online (Sandbox Code Playgroud)
如果您对WinDbg工作区有所了解,可以将符号路径设置保存在工作区中,这样就不需要在每个调试会话中键入所有这些内容.不幸的是,如果你将它全部放在由分号分隔的一行中(我真的不明白为什么),它就不起作用了,但你.sympath
现在可以输入并复制结果.它应该是
cache*c:\symbols;\\server\symbols;SRV*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)
我现在无法重现这一点,但我记得有些问题.原因是:WinDbg在访问网络共享时不会要求凭据.解决方法是:如果您没有收到符号\\server\symbols
,请在Windows资源管理器中打开该网络共享.资源管理器将要求提供凭据,它们将由Windows缓存,因此可由WinDbg隐式使用.
归档时间: |
|
查看次数: |
3377 次 |
最近记录: |