0

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

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

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

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

进入

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

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

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

4

1 回答 1

0

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

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

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

    # 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 的完整源代码。

于 2011-03-31T04:27:10.810 回答