Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 通过http设置公共(或专用)符号服务器_Visual Studio_Http_Symbol Server - Fatal编程技术网

Visual studio 通过http设置公共(或专用)符号服务器

Visual studio 通过http设置公共(或专用)符号服务器,visual-studio,http,symbol-server,Visual Studio,Http,Symbol Server,我找到的每一篇文档(参考文献1到5)都谈到通过使用共享UNC路径来设置符号服务器,然后将正确的设置提供给本地调试器实例(无论是_NT_symbol_path还是Visual Studio IDE调试设置) Microsoft通过http为其公共符号存储提供了一个符号服务器(参考6) 我想为自己的代码创建一个可以通过http传输而不是UNC文件共享访问的符号服务器。Mozilla的人似乎已经这样做了(参考文献7),但它不再起作用 是否有比我目前发现的更好的参考资料来执行此任务 参考资料

我找到的每一篇文档(参考文献1到5)都谈到通过使用共享UNC路径来设置符号服务器,然后将正确的设置提供给本地调试器实例(无论是_NT_symbol_path还是Visual Studio IDE调试设置)

Microsoft通过http为其公共符号存储提供了一个符号服务器(参考6)

我想为自己的代码创建一个可以通过http传输而不是UNC文件共享访问的符号服务器。Mozilla的人似乎已经这样做了(参考文献7),但它不再起作用

是否有比我目前发现的更好的参考资料来执行此任务


参考资料


  • 我相信答案很简单,“只要通过某种http路径共享目录就行了。”据我所知,这很管用


    换言之,
    symstore.exe
    用于存储符号的目录,当用作时,将可用作Windows调试工具的符号服务器目标。

    当多个用户直接对同一符号存储使用symstore.exe时,请小心。微软关于这一主题的白皮书让人觉得你只是创建了一个共享,并让每个人都通过作为Windows调试工具的一部分交付的SYMSTORE.EXE程序进行更新。白皮书建议您在每个构建中都完成此操作

    对于单个用户,或者通过一个人为团队更新symbol服务器来导入所有更新时,它非常有效

    不幸的是,一些白皮书底部的“细则”指出,只有一个运行symstore.exe的用户可以同时更新共享符号服务器,而不会破坏内容

    (例如:在,Microsoft说:“注意,SymStore不支持来自多个用户的同时事务。建议将一个用户指定为symbol store的“管理员”,并负责所有添加和删除事务。”)

    因此,没有将更新序列化到符号存储的内在机制。多次同时尝试更新符号存储可能会破坏符号存储和/或其索引

    我们不可能在所有时区为我们整个数千人的国际公司建造建筑,这取决于在一个地点通过一个人进行协调

    基于这些白皮书,我在2009年3月向微软提出了这个问题;世卫组织证实这是一个可能的问题。在讨论之后,我们选择实现一个符号更新服务,该服务通过直接Windows调试工具SDK DbgEng.DLL SymbolSrvStoreFile()API调用序列化更新,因此不可能同时对同一符号区域进行两次同时更新。用户有一个生成操作,该操作通过服务将其符号排队,而不是直接更新符号存储。然后,服务序列化更新,以确保不会发生真正的并发更新尝试

    关于使用SymSrvStoreFile的有限文档在当时不是很清楚。我确实让它工作了。希望从那时起情况有所改善。如果不是,最关键的问题是输入路径必须以类似于_NT_SYMBOL_path的格式指定。因此,您可以指定“srv*C:\Data\MyProject\bin”,而不是使用“C:\Data\MyProject\bin”作为输入路径


    我们的服务现在还通过数据库记录更新。该数据库既可作为符号存储的备份(以防其损坏且必须重建),也可创建报告点,以便管理人员和支持人员知道谁在实际保存符号,谁不保存符号。我们每周生成一份“symbol check-in”报告,并通过电子邮件自动发送给利益相关者。

    我们(Mozilla)的symbol服务器工作正常,AFAICT。我们没有做任何特别复杂的事情,我们只是将PDB文件放入正确的目录结构(我们有,但您可以使用symstore.exe)并通过Apache提供它。我认为我们唯一的特别之处是一些重写规则,允许以不区分大小写的方式访问文件,因为Microsoft的工具在文件名/GUID大小写方面确实不一致。

    通过HTTP服务的符号服务器与通过UNC文件路径服务的符号服务器具有相同的结构,因此,最简单的方法是使用symstore.exe将文件存储在某个文件夹中,然后使用一个简单的HTTP服务器通过HTTP公开该文件夹(即使在symbols目录中运行
    python-m SimpleHTTPServer

    一个小问题是,如果符号文件不存在,HTTP服务器必须返回404错误代码(至少在Visual Studio 2013下测试)。我遇到了一个问题,HTTP服务器返回403以查找丢失的文件,导致Visual Studio在第一次请求失败后停止发出请求

    symstore.exe创建许多辅助文件和文件夹(
    000Admin/
    文件夹、
    refs.ptr
    files.ptr
    文件)。这些都不是符号服务器工作所必需的

    如果要在不使用symstore.exe的情况下创建符号存储,可以上载具有以下结构的文件:

    BinaryName.pdb/$BUILD\u ID/BinaryName.pdb
    BinaryName.exe/$LINK\u ID/BinaryName.exe
    


    其中,
    BUILD_ID
    是嵌入在PDB文件和可执行文件中的GUID,
    LINK_ID
    是可执行文件中构建时间戳和文件大小的组合。可以通过从breakpad库读取dump_syms.exe工具的输出来获取这些信息。参见参考文献:1。2.3.4.5.6.7.如果在启用WebDav的IIS文件共享上设置此选项,会怎么样?也许微软就是这么做的,所以也许要做的就是连接一个TCP连接