使用符号服务器/源索引来调试Visual Studio中的生成

Jim*_*key 7 tfs tfsbuild visual-studio-2013 tfs2013

我正在使用Visual Studio 2013和Team Foundation Server 2013.我有这些,以及在我的个人计算机上运行的构建控制器/代理,称为"FUSROHDAH".

我的目标是获取由TFS构建代理生成的构建并在Visual Studio中打开它以进行调试,并让它利用源索引PDB从TFS源代码控制系统访问源代码,以便我可以逐步执行代码.我研究过几篇关于PDB和源索引的文章,包括:

Ed Squared在TFS 2010中关于源服务器和符号服务器支持的文章

John Robbins关于PDB文件的文章

我还观看了John Robbins关于WintellectNOW的非常出色的视频,该视频讨论了设置符号服务器,源索引的许多细微差别.

然而,尽管有几天的头发拉动,我还没有能够使这个工作.

我已经设置了TFS用于持续集成.这是我的设置:

在Build Definition-> Build Defaults中,我将Staging Location设置为"将构建输出复制到以下drop文件夹(UNC路径,例如\ server\share)":

\\ fusrohdah\builds(这相当于我机器上的c:\ builds)

构建定义 - >过程模板设置:

发布符号的路径:\\ fusrohdah\symbols \(这相当于我机器上的c:\ symbols)

我注意到TFS 2013中的默认流程模板与讨论TFS 2010的文章有所不同.在Ed Squared的文章中,有一个"索引源"选项.在TFS 2013中,此设置消失了,在说明文本中,它显示"指定符号存储共享的路径.设置此值时,源索引是构建的一部分." 因此,我假设我的构建上运行了源索引,只需指定此位置即可.

所以我采用一个简单的控制台应用程序HelloWorld,然后执行一系列更改和签入.我观察到构建文件正如我所期望的那样发布到builds文件夹,并且EXE和PDB文件并排.

所以我想在Visual Studio中使用较旧的构建并对其进行调试,并逐步完成从TFS源索引获得的源代码.我在Visual Studio中打开EXE并按F11启动控制台应用程序并开始进入Main()过程中的代码.但是,当发生这种情况时,我收到以下消息:

--------------------------- Microsoft Visual Studio -------------------- -------源文件:C:\ builds\2\LocalTestProject\HelloWorld\src\HelloWorld\HelloWorld\Program.cs

模块:C:\ builds\HelloWorld\HelloWorld_20140722.6\HelloWorld.exe

过程:[6016] HelloWorld.exe

源文件与构建模块时不同.您希望调试器还能使用它吗?

这似乎是我问题的症结所在.我的理解是,当Visual Studio读取我的PDB文件时,它应该执行TF.exe以从TFS获取正确版本的源代码,并且似乎未能这样做.我使用PDBStr.exe来查看构建发布的PDB文件,似乎没有任何问题:

c:\builds\HelloWorld\HelloWorld_20140722.6>pdbstr -r -p:helloworld.pdb -s:srcsrv

SRCSRV: ini ------------------------------------------------
VERSION=3
INDEXVERSION=2
VERCTRL=Team Foundation Server
DATETIME=Tue Jul 22 23:04:51 2014
INDEXER=TFSTB
SRCSRV: variables ------------------------------------------
TFS_EXTRACT_CMD=tf.exe view /version:%var4% /noprompt "$%var3%" /server:%fnvar%(
%var2%) /console >%srcsrvtrg%
TFS_EXTRACT_TARGET=%targ%\%var2%%fnbksl%(%var3%)\%var4%\%fnfile%(%var5%)
SRCSRVVERCTRL=tfs
SRCSRVERRDESC=access
SRCSRVERRVAR=var2
VSTFSSERVER=http://fusrohdah:8080/tfs/DefaultCollection
SRCSRVTRG=%TFS_extract_target%
SRCSRVCMD=%TFS_extract_cmd%
SRCSRV: source files ---------------------------------------
C:\Builds\2\LocalTestProject\HelloWorld\src\HelloWorld\HelloWorld\Program.cs*VST
FSSERVER*/LocalTestProject/HelloWorld/HelloWorld/Program.cs*18*Program.cs
SRCSRV: end ------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我在Output窗口中观察到Visual Studio认为它在我调试EXE时已经成功加载了符号.我没有看到一条消息表明它运行了TF.exe,但是,我认为它无法运行它来获取源代码.

我在Visual Studio中验证了我的"启用我的代码"UNCHECKED和"启用源服务器支持"CHECKED,以及"将源服务器诊断消息打印到输出窗口".

问题:如何知道Visual Studio是否正在尝试运行TF.exe以从TFS获取源代码,就像我期望的那样?

除此之外,我不确定我的问题是构建配置,符号服务器/源服务器配置,还是我尝试使用上述部分进行调试的方法.我将向能够照亮我道路的巫师承诺忠诚!

Rol*_*man 0

您是否尝试在调试之前删除构建服务器工作目录?如果调试器可以在磁盘上找到 SRCSRV 中表示的文件,它将优先于使用 tf.exe 获取它们(即使它们是错误的版本匹配)。仅当它无法在磁盘或缓存中找到文件时,它才会尝试引用源服务器。由于您是在构建服务器上执行此操作,因此这些位置表示源的更高版本。