0

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

今天我终于弄清楚了所有非私有符号是如何到达那里的。我从私有符号服务器中删除了 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 以某种方式对符号路径做了一些不同的事情......

4

1 回答 1

0

你的第一次尝试

首先,您提到符号路径

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

根据您链接的文档

检索符号时,文件和文件夹会出现在 \mainserver\symbols 共享目录中,以及单个缓存中的 c:\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

这(从语法的角度来看)与

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

并在链接的 MSDN 文档中这样描述:

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

所以是的,它会将 Microsoft 文件下载到G:.

你的第三种方法

你最后一次尝试是

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

任何链接文档都没有描述srv*http...语法(没有定义本地文件夹),所以我不确定会导致什么行为。

我的提议

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

应该将私有符号从 G: 下载到 C:。和

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

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

SRV*c:\symbols*G:\Foundations\Symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
于 2015-10-03T20:47:35.193 回答