【问题标题】:How do I get the svnindex.cmd script included with SrcSrv to index source files with URI-escaped spaces in them?如何获取 SrcSrv 中包含的 svnindex.cmd 脚本来索引其中包含 URI 转义空格的源文件?
【发布时间】:2011-03-31 04:12:02
【问题描述】:

我最近设置了一个符号服务器,并在我们的构建脚本中添加了SrcSrv 支持,以便我们可以轻松地从现场调试故障转储,并让 WinDbg 和/或 Visual Studio 调试器从中获取正确版本的源文件我们的 Subversion 存储库用于编译我们应用程序的任何特定版本崩溃。

我在我们的构建脚本中添加了一行来调用 Debugging Tools for Windows 软件包附带的 stock svnindex.cmd 脚本,但发现该脚本会混淆包含 URI 转义字符(如空格)的存储库文件路径,因此 WinDbg 可以'不要从存储库下载文件。

注意svnindex.cmd(特别是它启动的svn.pm Perl 脚本)从svn info 命令的输出中获取源文件的存储库位置,并svn URI 转义存储库路径。当svnindex.cmd 遇到这种情况时,它会破坏路径。比如它会转路径

"http://mysvnrepo/My%20Application/trunk/Database%20Layer/OracleAdapter.cs"

进入

"http://mysvnrepo/My20Layer/OracleAdapter.cs"

事实证明,SrcSrv 将“%”之间的任何内容解释为它在运行时替换的变量名。

假设重命名我们存储库中的所有目录以删除可能会被 URI 转义的空格和其他“特殊”字符是不可行的,我该如何解决这个限制?

【问题讨论】:

    标签: svn debugging windbg pdb-files srcsrv


    【解决方案1】:

    解决此问题的一种快速方法是编辑 svnindex.cmd 运行的 svn.pm Perl 脚本,以将源服务器元数据嵌入到您的 PDB 文件中。

    如果您有 WinDbg 6.11.0001.404,此文件位于 Debugging Tools for Windows 安装目录下的 srcsrv 目录中(例如,在我的机器上它位于 C:\Program Files\Debugging Tools for Windows (x86)\srcsrv)。在旧版本的 WinDbg 中,此文件位于 sdk\srcsrv 下。就我而言,我在构建服务器上编辑了svn.pm 的副本,因为构建服务器实际上调用了svnindex.cmd

    我的解决方案是在脚本进一步处理它们之前简单地取消转义 URI 转义的文件路径。我在svn.pm 中的GatherFileInformation 子例程中添加了以下行,位于以注释# Loop on "Path:" entries 开头的while 循环之后。我在该循环的右大括号之后添加了这些行(svn.pm 副本中的第 206 行):

        # Fix for Subversion URL's. The "%" character is treated specially by SRCSRV, so
        # we need to remove URI escape sequeneces to get rid of them
        # - Mike Spross (3/30/2011)
    
        use URI::Escape;
        $FileRepository = uri_unescape($FileRepository);
        $FileRelative = uri_unescape($FileRelative);
    

    这解决了问题,让我可以在我的开发机器上提取运行 WinDbg 的完整源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 2011-09-21
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      相关资源
      最近更新 更多