【问题标题】:In MSVS what are symbols and why it is required to be cached?在 MSVS 中什么是符号以及为什么需要缓存它?
【发布时间】:2013-11-29 16:08:15
【问题描述】:

在 MSVS 2010 中,如果您转到 Tools->Options->Debuggibg,则会打开以下窗口。

我想知道这些符号是什么?为什么我们要缓存它?对于现在常见的 500 GB 驱动器来说是否太大了?

【问题讨论】:

  • 您还没有 500 千兆互联网服务。不要将它们存储在 Windows 目录中。

标签: visual-studio debugging symbols


【解决方案1】:

符号是在您构建代码并启用适当功能时生成的 .pdb 文件。这些文件提供了从二进制代码到为生成该二进制文件而编写的实际语句的映射。

由于它们通常是从远程位置下载的,并且由于它们不会经常针对外部库进行更改,因此当您不必每次都下载这些文件时,它确实加快了调试速度。

在我的机器上,符号缓存大小约为 600MB。您的 500GB 驱动器对于正常操作应该绰绰有余。

另请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363368(v=vs.85).aspx

当您启用Framework Source Stepping 时,此功能特别强大,结合 Microsoft 符号服务器,您可以调试 .NET 框架的某些部分。这些符号是从 Microsoft 下载的,Visual Studio 会从符号中读取要下载的源文件,以便为您启用调试。


符号缓存在调试期间使用,以提供更丰富的信息。每个解决方案内部都有一个类似的对话框,用于定义在构建解决方案期间生成的调试符号级别。这是告诉汇编器/编译器如何处理这些事情的地方。


在 Team Build 内部(如果您正在运行 TFS),可以选择在自动构建过程中生成这些符号文件。然后可以从 IntelliTrace 或 WinDbg 引用这些文件,为您提供更丰富的调试体验,而无需将调试版本或调试符号部署到生产环境(将 .pdb 文件部署到生产环境会导致更高的内存使用率和较小的性能命中是因为运行时会将这些符号加载到内存中。发生异常时也会导致额外的开销,因为这些符号文件中的信息丰富了这些信息。

见:http://msdn.microsoft.com/en-us/library/vstudio/hh190722.aspx

【讨论】:

  • @jessehopuwing 这个映射不是汇编的工作吗?为什么调试时会提到这个?
  • @gpuguy:从符号服务器下载的符号通常用于未作为项目一部分构建的系统二进制文件(例如 kernel32.dll),尽管团队也可能拥有它是自己的符号服务器或存档。它在调试选项中,因为它是下载和使用符号的调试器。
  • 另外,如果您点击“?”对话框上的按钮,您将打开一个包含更多详细信息的网页(也可以点击页面底部“另见”部分中的链接)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2015-07-04
  • 1970-01-01
  • 2018-01-07
  • 2011-07-21
  • 2017-12-28
  • 2014-03-04
相关资源
最近更新 更多