tfs - 使用符号服务器/源索引在 Visual Studio 中调试构建

标签 tfs visual-studio-2013 tfsbuild

我使用的是 Visual Studio 2013 和 Team Foundation Server 2013。我有这些,以及构建 Controller /代理,在我的个人计算机上运行,​​称为“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 并执行一系列更改和 checkin 。我观察到构建被发布到构建文件夹,正如我所期望的,并排有一个 EXE 和 PDB 文件。

因此,我想采用旧版本并在 Visual Studio 中对其进行调试,并逐步执行从 TFS 源索引获得的源代码。我在 Visual Studio 中打开 EXE 并按 F11 以启动控制台应用程序并开始单步执行 Main() 过程中的代码。但是,当发生这种情况时,我收到以下消息:

--------------------------- Microsoft Visual Studio --------------------------- Source file: C:\builds\2\LocalTestProject\HelloWorld\src\HelloWorld\HelloWorld\Program.cs

Module: C:\builds\HelloWorld\HelloWorld_20140722.6\HelloWorld.exe

Process: [6016] HelloWorld.exe

The source file is different from when the module was built. Would you like the debugger to use it anyway?



这似乎是我问题的症结所在。 我的理解是,当 Visual Studio 读取我的 PDB 文件时,它应该执行 TF.exe 以从 TFS 获取正确版本的源代码,但它似乎无法做到这一点。我用 PDBStr.exe 查看了 build 发布的 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 获取源代码?

除此之外,我不确定我的问题是否与构建配置、符号服务器/源服务器配置或我尝试使用上述部分进行调试的方法有关。我将效忠于能为我照亮道路的巫师!

最佳答案

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

关于tfs - 使用符号服务器/源索引在 Visual Studio 中调试构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921183/

相关文章:

tfs - 使用 TFS Team Build 自定义放置文件夹结构

msbuild - 将 TeamBuild 的一部分作为 x64 运行 [用于 xunit.net 测试]

c# - TFS 构建 CopyDirectory 错误不停止构建

ssl - tfs 构建随机失败

asp.net - TFS 2017 版本定义。 WinRM - IIS Web 应用程序管理任务。在 "Default web site"下创建应用

c - 如何在 main 下调用另一个函数 (VC++ C)

tfs - 在 TFS 构建过程中部署数据库和 Web 项目

c++ - 如何在 MVVM Windows 应用商店应用程序中为私有(private) C++ 模型层编写 Visual Studio 单元测试?

c++ - 编辑并继续生成幻像错误

visual-studio-2010 - TFS2010 : Need the Absolute Path of the Source Directory