gpt4 book ai didi

c++ - 如何设置 Windows 符号服务器

转载 作者:可可西里 更新时间:2023-11-01 16:30:55 24 4
gpt4 key购买 nike

我在网络上有一个备用服务器,我想用它来托管我们所有的构建符号。我已经知道如何在我的本地开发系统上设置符号缓存并将我的调试器(例如 Windbg)指向“符号文件路径”中的该路径。我假设我可以对网络上具有自己的符号缓存(例如\\host\symbols)的另一个系统执行相同的操作。

我设置了服务器并在目录上启用了文件共享,因此我可以通过 Windows 资源管理器远程访问它。然而,当我尝试在 WinDbg 中指向它时,它似乎并没有在那里拾取符号。

符号文件路径设置如下:

srv*\\192.168.1.20\symbolpath*http://msdl.microsoft.com/download/symbols

我似乎没有在服务器上正确配置它——是否有我可能遗漏的步骤?

最佳答案

设置符号服务器和/或符号网络共享时需要了解几件事情。

WinDbg 符号加载顺序

在符号路径中从头到尾搜索符号,即在符号路径中C:\a;C:\b , 它会首先在 C:\a 中查找然后在 C:\b .虽然这并不重要,但它对性能影响很大。如果您有自己的符号,请始终将它们放在首位,这样您就可以节省到 Microsoft 服务器的 HTTP 往返行程。

符号存储类型

共有三种符号存储类型:

  • 本地存储(磁盘上的目录)
  • 服务器存储(网络共享)
  • 符号服务器/HTTP 存储(带有 HTTP URL)

符号存储层

您可以拥有三种类型的符号存储,并且不应将它们混合在一个目录中:

  • 0 层或简单的 PDB 文件平面列表,通常创建为构建脚本或复制/粘贴操作的输出。
  • 2 层:符号存储为 <filename>.pdb\<hash>\<filename>.pdb .您从现有的空(0 字节)中识别出 2 层符号存储 pingme.txt文件和一个 000Admin文件夹。不要删除它们。
  • 3 层:符号存储为 <fi>\<filename>\<hash>\<filename>.pdb> .您从空(0 字节)中识别出 3 层符号存储 index2.txt文件。不要删除它。 3 层商店应该可以提高性能。

您可以使用 symstore.exe 将符号从 0 层存储到 2 层或 3 层存储WinDbg 附带的。您可以使用 convertstore.exe 将 2 层商店转换为 3 层商店.如果出现错误,请参阅 Convertstore Errors .

创建“符号服务器”

您设置的不是符号服务器,而是服务器符号存储,因为您使用(并且想要使用)网络共享,而不是 HTTP 网络服务器。以下是设置步骤:

  1. 在服务器上创建一个新的空目录
  2. 如果您想添加来自不同机器的符号,请共享具有写入权限的文件夹。如果您从服务器本身添加符号(例如,如果服务器是构建可执行文件的持续集成服务器),则读取权限应该足够了。
  3. 运行 symstore add /3 /f "Filename.pdb" /s "\\server\symbols" /t "Title"如果你想从不同的机器添加符号或使用 /s "C:\share\symbols"如果您在本地添加它们。

对您要添加的所有版本的 PDB 文件重复步骤 3。您还可以使用通配符,例如 *.pdb .理想情况下,您将该步骤集成到您的构建过程中。

在WinDbg中使用网络共享

出于性能原因,开发人员希望在本地缓存来自网络的您自己的符号以及 Microsoft 符号。因此,让我们先创建这样一个本地缓存:

.sympath cache*C:\Symbols

我通常让缓存文件夹用 NTFS 压缩,因为符号压缩得很好。

接下来,让我们先找到自己的符号,以避免往返微软:

.sympath+ \\server\symbols

最后,尝试从 Microsoft 下载其他所有内容:

.symfix+

如果您对 WinDbg Workspaces 有所了解,您可以将符号路径设置保存在工作区中,这样您就不必在每个调试 session 中都键入所有这些内容。不幸的是,如果你将它们全部放在一行中并用分号分隔(我真的不明白为什么),它不起作用,但你可以输入 .sympath现在并复制结果。应该是

cache*c:\symbols;\\server\symbols;SRV*http://msdl.microsoft.com/download/symbols

潜在问题

我现在无法重现,但我记得有些问题。原因是:WinDbg 在访问网络共享时不会要求凭据。解决方法是:如果您没有收到来自 \\server\symbols 的符号, 在 Windows 资源管理器中打开该网络共享。 Explorer 将要求凭据,它们将由 Windows 缓存,因此由 WinDbg 隐式使用。

关于c++ - 如何设置 Windows 符号服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com