【发布时间】:2014-09-15 06:27:21
【问题描述】:
我正在使用 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
我还在 WintellectNOW 上观看了 John Robbins 的非常出色的视频,其中讨论了设置符号服务器、源索引的许多细微差别。
但是,尽管拉了几天的头发,我仍然无法完成这项工作。
我已经为持续集成设置了 TFS。这是我的设置:
在 Build Definition->Build Defaults 中,我已将 Staging Location 设置为“将构建输出复制到以下放置文件夹(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 ------------------------------------------------
我在“输出”窗口中观察到,在我调试 EXE 时,Visual Studio 认为它已成功加载符号。 但是,我没有看到表明它运行 TF.exe 的消息,所以我认为它无法运行它来获取源代码。
我确实在 Visual Studio 中验证了“仅启用我的代码”未选中,“启用源服务器支持”已选中,以及“将源服务器诊断消息打印到输出窗口”。
问题:我如何知道 Visual Studio 是否像我预期的那样尝试运行 TF.exe 以从 TFS 获取源代码?
除此之外,我不确定我的问题是与构建配置、符号服务器/源服务器配置还是我尝试使用上述部分进行调试的方法有关。我会向能为我照亮道路的巫师宣誓效忠!
【问题讨论】:
-
您是否在 Visual Studio 中设置了符号服务器的位置。工具>选项>调试>符号?
-
@JustTFS:是的,我将我的 _NT_SYMBOL_PATH 环境变量设置为:SRVC:\MYSYMBOLS\PUBLIC*\\fusrohdah\symbols;SRVC:\MYSYMBOLS\PUBLICreferencesource.microsoft.com/symbols;SRVC:\MYSYMBOLS\PUBLIC*msdl.microsoft.com/download/symbols
-
你在visual studio中添加符号路径了吗?这对我有用,我什至使用此设置进行了远程调试。
-
关于这个主题的任何更新?我在使用 TFS Build vNext 和 Visual Studio 2015 时遇到了同样的问题。在输出窗口中,我读到“源文件已更改。它不再与用于构建正在调试的应用程序的文件版本匹配。”如果断点被击中,除了我无法读取可变内容之外,一切正常。在监视窗口中,我阅读:表达式评估器中的内部错误。这应该如何工作?
-
我将 Visual Studio 2013 与 Team Fundation Server 2012 一起使用,并且能够执行此操作。我希望这不是您正在使用的一个或两个新版本的回归。
标签: tfs visual-studio-2013 tfsbuild