代码之家  ›  专栏  ›  技术社区  ›  Doug T.

为什么我的本地DLL在设置“nt”符号“path”后会永远加载?

  •  3
  • Doug T.  · 技术社区  · 15 年前

    我已经设置了符号路径并将其指向

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

    启动调试器时,我注意到与Windows相关的DLL加载很快。然而,我们公司的DLL需要很长时间才能加载。当我摆脱了符号路径后,重新启动Visual Studio,然后很快加载所有内容(尽管我没有MS符号)。

    这就好像上面的符号服务器正在搜索我的内部公司dll的pdb,而不是首先检查它们是否存在于本地。有些DLL没有PDB。有些是我的解决方案的一部分,所以我在调试时构建它们,并且始终拥有PDB。

    Visual Studio如何搜索符号?我是否可以控制Visual Studio如何搜索符号?我可以明确地说,对于给定目录中的dll,不需要搜索符号吗?是否还有其他可能拖慢符号加载速度的东西,或者我可以做什么来加快进程?

    2 回复  |  直到 15 年前
        1
  •  9
  •   Roger Lipscombe    15 年前

    Visual Studio搜索 _NT_SYMBOL_PATH 之前 在Visual Studio中配置的任何路径。这是调试引擎的一个“特性”。这意味着将搜索Microsoft的符号服务器以查找您的符号。

    在Visual Studio 2010中,他们通过(如果已设置)包括 符号符号路径 在“调试符号”对话框中。很遗憾,这个条目 cannot be moved up or down .

    要解决此问题,请将符号服务器放入 符号符号路径 之前 微软的东西:

    _NT_SYMBOL_PATH=cache*C:\symbols;\\mysymsvr\Symbols;SRV*C:\symbols*http://msdl.microsoft.com/download/symbols

        2
  •  2
  •   JaredPar    15 年前

    除了@roger的正确答案。

    如果您在Visual Studio中进行调试,我将避免使用 _NT_SYMBOL_PATH 支持使用Visual Studio设置的环境变量。

    工具->选项->调试符号

    在2010年,这允许您比原始环境变量路由更大的粒度。例如,可以筛选默认情况下Visual Studio尝试为其加载符号的dll列表。这在大型项目中非常有价值,因为您只对dll的一小部分感兴趣,并且希望减少加载时间。