如何使SrcSrv中包含的svnindex.cmd脚本为源文件编制索引,其中包含URI转义空格?
我最近设置了一个符号服务器,并为我们的构建脚本添加了支持,以便我们可以轻松地从现场调试崩溃转储,并让WinDbg和/或Visual Studio调试器从我们的Subversion存储库中获取正确版本的源文件,这些源文件用于编译崩溃的应用程序的任何特定版本 我在构建脚本中添加了一行代码,以调用Windows调试工具软件包附带的stock如何使SrcSrv中包含的svnindex.cmd脚本为源文件编制索引,其中包含URI转义空格?,svn,debugging,windbg,pdb-files,srcsrv,Svn,Debugging,Windbg,Pdb Files,Srcsrv,我最近设置了一个符号服务器,并为我们的构建脚本添加了支持,以便我们可以轻松地从现场调试崩溃转储,并让WinDbg和/或Visual Studio调试器从我们的Subversion存储库中获取正确版本的源文件,这些源文件用于编译崩溃的应用程序的任何特定版本 我在构建脚本中添加了一行代码,以调用Windows调试工具软件包附带的stocksvnindex.cmd脚本,但发现脚本garbles存储库文件路径包含URI转义字符,如空格,因此WinDbg无法从存储库下载文件 请注意,svnindex.cm
svnindex.cmd
脚本,但发现脚本garbles存储库文件路径包含URI转义字符,如空格,因此WinDbg无法从存储库下载文件
请注意,svnindex.cmd
(特别是它启动的svn.pm
Perl脚本)从svn info
命令的输出中获取源文件的存储库位置,svn
URI转义存储库路径。当svnindex.cmd
遇到此问题时,它会破坏路径。例如,它将改变路径
"http://mysvnrepo/My%20Application/trunk/Database%20Layer/OracleAdapter.cs"
进入
结果表明,SrcSrv将“%”之间的任何内容解释为它在运行时替换的变量名
假设重命名存储库中的所有目录以删除空格和其他URI转义的“特殊”字符是不可行的,如何绕过此限制?解决此问题的快速方法是编辑
svn.pm
Perl脚本,该脚本运行svnindex.cmd
以将源服务器元数据嵌入到PDB文件中
如果您有WinDbg 6.11.0001.404,则此文件位于Windows调试工具安装目录下的srcsrv
目录中(例如,在我的计算机上,它位于C:\Program Files\Debugging Tools for Windows(x86)\srcsrv
)。在旧版本的WinDbg中,此文件位于sdk\srcsrv
下。在我的例子中,我在构建服务器上编辑了svn.pm
的副本,因为构建服务器实际上调用了svnindex.cmd
我的解决方案是,在脚本进一步处理URI转义文件路径之前,只需对其进行unescape。我在svn.pm
中的gatherefileinformation
子例程中添加了以下行,在以“Path:”entries上的注释#循环开始的while
循环之后。我在该循环的右括号后面添加了这些行(在我的svn.pm
副本中的第206行):
这解决了问题,并允许我在开发机器上获取运行WinDbg的完整源代码
"http://mysvnrepo/My20Layer/OracleAdapter.cs"
# 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);