【问题标题】:srctool claims it has extracted source files, but just lists their URLssrctool 声称它已经提取了源文件,但只是列出了它们的 URL
【发布时间】:2016-04-18 15:49:57
【问题描述】:

我有一个源索引 PDB,但 Visual Studio 在调试时不会尝试下载适当的源(使用 Fiddler 验证),即使它确实在符号缓存中创建了正确的目录结构(即在 src/ 子目录下) .为了解决我使用 srctool.exe 的问题:

srctool -x myfile.pdb

但是,这只会导致 URL 被列出;它不会尝试下载它们:

https://myurl.com/bitbucket/projects/BLAH/repos/MyRepo/browse/Src/SomeDir/SomeFile.cs?at=05bff5155beece6c7e6acde97f7aeefc7b65e2cf&raw
...
myfile.pdb: 20 source files were extracted.

pdbstr 的输出如下:

SRCSRV: ini ------------------------------------------------    
VERSION=2    
SRCSRV: variables ------------------------------------------
RAWURL=https://myurl.com/bitbucket/projects/BLAH/repos/MyRepo/browse/%var2%?at=05bff5155beece6c7e6acde97f7aeefc7b65e2cf&raw    
SRCSRVVERCTRL=https    
SRCSRVTRG=%RAWURL%    
SRCSRV: source files ---------------------------------------   
E:\AnotherDir\work\9f49bd3ba978a6f5\Main\Src\SomeDir\SomeFile*Src/SomeDir/SomeFile
...
SRCSRV: end ------------------------------------------------

如果有人能指出正确的方向来弄清楚发生了什么,我将不胜感激。

【问题讨论】:

    标签: .net visual-studio debugging pdb srcsrv


    【解决方案1】:

    SRCSRV 不适用于查询 URL(请参阅 this issuethis issue)。

    如果您使用的是公共 Bitbucket 存储库,则可以使用 this acceptance test 之类的模式;也就是说,

    RAWURL=https://bitbucket.org/BLAH/MyRepro/raw/05bff5155beece6c7e6acde97f7aeefc7b65e2cf/%var2%
    

    不过,我不确定私人 Bitbucket 安装是否支持这种语法。查看this issue 了解更多信息 - 从我的简短阅读来看,它们似乎支持不带查询字符串的原始文件,但尚不清楚您是否可以指定不带查询字符串的提交哈希。

    从其他问题的 cmets 看来,一个常见的解决方法(对于私人 Bitbucket 安装)是设置 url 重写或可以采用 SRCSRV 友好 URL 的小型直通 Web 服务。


    关于srctool,我认为它的输出有点误导,但在技术上是正确的。对于 VS 可以下载的正确来源索引的 PDB,它的行为确实相同。

    以这种方式映射的 PDB 指定 SRCSRVTRG(目标)而不是 SRCSRVCMD(下载命令)。 SRCSRV is supposed to check the target and - if the file is not there - it will execute the download command:

    接下来,它使用 VAR1 将 SRCSRVTRG 变量扩展为 VARn。如果文件已经在这个位置,它会将位置返回给调用者。

    否则,它会扩展 SRCSRVCMD 变量以构建从源代码管理中检索文件并将其复制到目标位置所需的命令。最后,它执行这个命令。

    在这种情况下,目标是实际的 HTTPS URL。从技术上讲,文件已经“在”那个位置,所以 SRCSRV 只返回文件位置,srctool 报告它已经在那里(带有误导性的“提取”消息)。

    当 VS 确实下载文件时,它将其存储在本地的符号缓存下,但这是此过程中的进一步步骤;将其存储在那里并不是绝对必要的。

    【讨论】:

    • 是的,我的问题确实是查询 URL,因为 VS 尝试基于 URL 创建目录/文件名,而问号不是有效字符。但是,文件的实际 检索 证明不是问题;它首先尝试创建目录/文件,然后在失败时退出。通过设置一个简单的客户端重定向从“有效”URL 到带有查询字符串的 URL 来解决这个问题,因为 VS 根据初始 URL 创建目录/文件名,而不是重定向的。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多