调试时,不相关的符号出现在私有符号服务器中

时间:2015-09-29 05:06:14

标签: debug-symbols symbol-server

我们有一个私有符号服务器(只是共享网络驱动器中的一个文件夹)。 前段时间我注意到它包含许多不属于我们的DLL的符号(System.Xml,clr,kernel32等)。 _NT_SYMBOL_PATH环境变量设置为SRV*c:\symbols*G:\Foundations\Symbols*http://msdl.microsoft.com/download/symbols,其中c:\symbols是我的本地缓存,G是映射网络驱动器。这是根据这里的说明:https://msdn.microsoft.com/en-us/library/windows/desktop/ee416588(v=vs.85).aspx#symbol_servers

今天我终于想出了所有非私人符号是如何到达那里的。我从私有符号服务器中删除了clr.pdb文件夹,并开始使用ClrMD调试转储。它们不仅仅在我的本地缓存中保存clr符号,而且还重新出现在私有符号服务器中。

如何防止这种情况发生?我不希望我们的私有符号服务器包含不相关的垃圾,这会占用空间并使文件夹变得混乱。 [我们已经有大约2600个文件夹,可能有90%不是我们的。我无法想象如何清理它......]

更新1

事实证明,这实际上是预期的行为,正如不同的 MSDN页面所记录的那样:https://msdn.microsoft.com/en-us/library/windows/desktop/ms681416(v=vs.85).aspx

根据另一个文档页面(https://msdn.microsoft.com/en-us/library/windows/desktop/ms680689(v=vs.85).aspx),使用cache元素将某个文件夹标记为缓存。但是,设置_NT_SYMBOL_PATH=CACHE*c:\symbols;SRV*G:\Foundations\Symbols*http://msdl.microsoft.com/download/symbols并不会阻止向私有符号服务器添加符号,并且设置_NT_SYMBOL_PATH=CACHE*c:\symbols;SRV*G:\Foundations\Symbols;SRV*http://msdl.microsoft.com/download/symbols会导致奇怪的行为:VisualStudio能够下载符号,但它们并没有在我的符号中结束但是,私有符号服务器,ClrMD无法下载我正在分析的转储符号...当我在VS中打开相同的转储时,它工作正常。所以我猜ClrMD在某种程度上与符号路径有所不同......

1 个答案:

答案 0 :(得分:0)

您的第一次尝试

首先,你提到了符号路径

undefined

根据你链接的文件

  

在检索符号时,文件和文件夹将出现在\ mainserver \ symbols共享目录中,以及单个缓存中的c:\ symbols目录中。

这就是预期的行为。

你的第二次尝试

您使用的第二个符号路径是

SRV*c:\symbols*G:\Foundations\Symbols*http://msdl.microsoft.com/download/symbols

由两部分组成:

CACHE*c:\symbols;SRV*G:\Foundations\Symbols*http://msdl.microsoft.com/download/symbols

(很好)和

cache*c:\symbols

(从语法的角度来看)与

相同
SRV*G:\Foundations\Symbols*http://msdl.microsoft.com

并在链接的MSDN文档中对此进行了描述:

  

要仅将Microsoft符号服务器与符号的本地缓存一起使用,以加快通过Internet的访问速度,请对_NT_SYMBOL_PATH使用以下设置:srv*c:\symbols*http://msdl.microsoft.com/download/symbols

是的,它会将Microsoft文件下载到srv*c:\symbols*http://msdl.microsoft.com/download/symbols

你的第三种方法

你的最后一次尝试是

G:

CACHE*c:\symbols;SRV*G:\Foundations\Symbols;SRV*http://msdl.microsoft.com/download/symbols 语法(没有定义本地文件夹)没有在任何链接文档中描述,所以我不确定会导致什么行为。

我的建议

srv*http...

应从G:下载私人符号到C:。和

SRV*c:\symbols*G:\Foundations\Symbols

应将符号从Microsoft下载到C:。所以将它们结合起来

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols