我有一个索引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 ------------------------------------------------
如果有人能给我指出正确的方向来弄清楚发生了什么,我将不胜感激。
1条答案
按热度按时间izkcnapc1#
SRCSRV不适用于查询URL(请参阅this issue和this issue)。
如果你使用的是公共Bitbucket存储库,你可以使用像this acceptance test这样的模式;即,
我不确定私人Bitbucket安装是否支持这种语法。查看this issue以获得更多信息-从我的简短阅读来看,它们似乎支持没有查询字符串的原始文件,但不清楚是否可以指定没有查询字符串的提交哈希。
从其他问题的评论来看,它看起来像一个常见的解决方案(对于私人Bitbucket安装)是设置url重写或一个小的passthrough web服务,可以接受SRCSRV友好的URL。
关于
srctool
,我相信它的输出有点误导,但在技术上是正确的。它确实对VS * 可以 * 下载的正确源索引的PDB表现相同。以这种方式Map的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真正下载文件时,它会将其存储在本地的符号缓存中,但这是这个过程中的进一步步骤;将其存储在那里并不是严格必要的。