我们有一个私有符号服务器(只是共享网络驱动器中的一个文件夹)。不久前,我注意到它包含许多不属于我们的 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:\symbols
G
今天我终于弄清楚了所有非私有符号是如何到达那里的。我从私有符号服务器中删除了 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 以某种方式对符号路径做了一些不同的事情......