65.9K
CodeProject 正在变化。 阅读更多。
Home

如何使用符号服务器?(以及为什么您真的希望这样做...)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (10投票s)

2012 年 1 月 12 日

CPOL

5分钟阅读

viewsIcon

44050

如何设置.NET符号服务器并在没有源代码的情况下启用生产环境调试

引言

在处理某个项目时,我们遇到一个问题,即一些基础结构代码与我们的解决方案分离,并被封装到一个类似第三方 DLL 的东西中。问题是,在尝试调试此外部 DLL 时,调试器会尝试在特定路径中查找源代码 – 即编译时原始源代码所在的路径。

这显然是个大问题

  1. 当与不同地区的团队合作时,每个团队都在处理相同的代码,但每个团队都在使用不同的开发服务器
  2. 在生产环境中 – 您希望能够在不依赖源代码初始位置的情况下,使用源代码调试您的应用程序

本文将重点介绍如何创建 PDB 对象,即编译器用于调试和查找源代码的对象。从某种意义上说,它将从源代码控件(TFS)而不是源文件中查找源代码。您会发现这些步骤非常容易遵循(特别是如果您已经拥有 TFS 和构建配置),因此您可以立即在您的项目中实施它们。

本文是关于此主题的许多其他有趣文章的汇编(请参阅末尾的资源部分)。它旨在简短明了,以最少的努力帮助您的项目变得更“可调试”。

非常感谢所有文章的作者 – John RobbinsCameron SkinnerEd Blankenship

背景

John Robbins 已经在其必读的 文章 中详细介绍了 PDB 文件是什么以及调试器如何查找 PDB 文件。

总而言之,PDB 包含调试器用于执行其工作的信息。.NET PDB 包含两部分信息:源文件名及其行号,以及局部变量名。其余数据已包含在 .NET 元数据中(例如,公共、私有和静态地址、全局变量名和地址等)。

调试器使用文件名和嵌入在 PDB 文件和二进制文件中的 GUID 来查找正确的 PDB 版本。

Using the Code

为了启用源代码控件 PDB,您需要遵循以下步骤

  1. 为您的项目创建一个公共构建定义(我不会在本文中详述公共构建定义的通用细节,但您可以在 这里 查找它(查找 Build support 部分)。
  2. 创建一个共享文件夹,用作发布文件夹。发布文件夹是公共构建放置 DLL 和 PDB 的地方。这些 DLL 将在您的代码中引用。
  3. 创建一个共享文件夹,用作您的符号服务器。符号服务器是一个集中的地方,您的 PDB 文件以及所需的源代码信息将驻留在此处。
  4. 更新定义以使用发布位置文件夹

    symbolserver/drop_folder.png

  5. 更新定义并设置发布符号的路径。此步骤执行两项操作 – 将 PDB 位置设置到符号服务器,以及执行称为源索引的操作,该操作创建源代码和源代码版本之间的映射。为此,只需在此处复制您的符号服务器 UNC 路径即可

    symbolserver/symbol_server.png

  6. 就是这样 – 您已完成公共构建的定义。现在您需要实际构建它,并准备好您的客户端使用符号服务器。

现在,如何使用符号服务器进行调试?

  1. 确保从发布位置引用 DLL。您不必直接引用发布位置,可以将其复制到任何您喜欢的文件夹。请确保将外部 DLL 和 PDB 与您的解决方案一起检入。
  2. 在 VS 中,转到 DebugàOptions and Settings .... 这将打开设置对话框中的调试部分。
  3. 转到“Symbols”选项,然后添加您的符号服务器(请注意,您可能有多个符号服务器,每个项目一个,或者一个集中式的)。为此,只需点击屏幕顶部的文件夹图标即可。最后,它应该看起来像

    symbolserver/symbol_server_vs_setup.png

  4. 转到“general”选项,并确保启用源服务器支持

    symbolserver/enable_source_server_setup.png

  5. 现在,您就可以调试您的第三方代码,而无需访问源代码。调试时,当您逐行执行第三方代码时,您将看到以下对话框

上述消息将出现在调试器需要查找每个新文件的位置。如果您不喜欢这样,请创建一个名为 *SRCSRV.ini* 的文件,将其放置在 *<Visual Studio Install Directory>\Common7\IDE* 文件夹中,并填入以下文本

[trusted commands]
tf.exe=<Visual Studio Install Directory>\Common7\IDE\tf.exe  

就是这样!

关注点

请注意,如果您遵循这些步骤,您实际上不需要将 PDB 文件与您的代码一起部署。TFS 会在 DLL 文件和匹配的 PDB 文件中嵌入唯一的 GUID。使用符号服务器和上述信息,调试器就知道去查找正确的 PDB。

很酷,对吧?

资源

历史

  • 2012年1月12日 - 第一次修订
  • 2012年1月13日 - 添加了资源
© . All rights reserved.