我正在使用Visual Studio 2013和Team Foundation Server 2013.我在个人计算机上运行了这些以及构建控制器/代理,称为" FUSROHDAH"。
我的目标是获取由TFS构建代理生成的构建并在Visual Studio中打开它以进行调试,并让它利用源索引PDB从TFS源代码控制系统访问源代码,以便我可以单步执行代码。我已经研究了几篇关于PDB和源索引的信息性文章,包括:
Ed Squared's article on Source Server and Symbol Server Support in TFS 2010
John Robbins' article about PDB files
我也看过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 ------------------------------------------------
我在“输出”窗口中观察到Visual Studio认为在我调试EXE时已成功加载符号。 但是,我没有看到指示它运行TF.exe的消息,因此我认为无法运行此命令以获取源。
我在Visual Studio中验证了我有"启用我的代码" UNCHECKED,"启用源服务器支持"检查,以及"打印源服务器诊断消息到输出窗口"。
问题:如何知道Visual Studio是否正在尝试运行TF.exe以从TFS获取源代码,如我所料?
除此之外,我不确定我的问题是否与构建配置,符号服务器/源服务器配置或我尝试使用上述部分进行调试的方法有关。我将向能够照亮我道路的巫师承诺忠诚!
答案 0 :(得分:0)
您是否尝试在调试之前删除构建服务器工作目录?如果调试器可以在磁盘上找到SRCSRV中表示的文件,那么它将优先于使用tf.exe获取它们(即使它们是错误的版本匹配)。只有当它无法在磁盘或缓存中找到文件时,它才会尝试引用源服务器。因为您在构建服务器上执行此操作,所以位置表示更高版本的源。