Linux上的PDB符号服务器

时间:2014-01-18 05:48:00

标签: windbg debug-symbols pdb-files

如何在运行HTTP服务器的Linux机器上设置符号服务器以与WinDbg和朋友一起使用?

上游符号服务器provided by Microsoft are HTTP servers(例如http://msdl.microsoft.com/download/symbols),我想模仿他们的行为,并启用通常的Win32调试器从我自己的下载符号。

如何在不模仿Windows的点点滴滴的情况下实现这一目标(例如通过Wine或KVM)?

3 个答案:

答案 0 :(得分:5)

如果您还没有,可能需要了解how to create a symbol store on Windows,因为要在Linux上创建一个,您需要创建一个兼容的文件结构。

首先,需要注意的是,通过http共享符号服务器并不特别。创建符号存储后,只需将其放在可通过http访问的位置即可。因此,真正重要的是symstore.exe所做的工作。

我知道你不想接受使用仿真的想法,但你真的有两个选择:

  1. 使用Wine之类的东西直接在Linux机器上执行symstore.exe。 (我不知道KVM在这里会有多好用。)
  2. 重新创建您需要使用的symstore.exe功能。
  3. 如果您不想使用任何更高级的功能(如交易,文件链接或多个用户可以导入),重新创建symstore.exe可能非常简单。


    symstore.exe所做的简化视图:

    1. 在输出子目录中创建一个子目录,其中每个pdb的名称都已导入。
    2. pdb文件进行哈希处理,并创建一个带有哈希名称的子文件夹。
    3. pdb复制到哈希目录,可选择压缩它。 (或者,根据标记,存储文件file.ptr以及导入pdb的位置。)
    4. 在哈希目录中的refs.ptr附加一行,其中包含有关导入的PDB的一些信息。 (我不相信客户端dgbhelp.dll实际使用了此文件,因此可能会省略此步骤。)
    5. 更新[output directory]\000Admin中的文件以支持交易等内容。 (同样,这仅适用于symstore.exe的未来运行。)
    6. 触摸输出文件夹中的pingme.txt
    7. (更多信息here。)

      这听起来并不复杂,但毫无疑问,可能需要一些时间来做对。首先,您可能需要查看Mozilla's build script,它将pdb置于Windows调试器知道如何阅读的结构中。有关它的更多信息可用here

答案 1 :(得分:5)

您可以使用python symstore包将PDB(和exe / dll)文件发布到本地symstore目录,然后您只需要将该目录与Web服务器一起提供。

  • 将Web服务器配置为目录的服务器竞赛,例如/ var / www / symbols
  • 安装'symstore'python包

每次需要发布新的PDB / exe / dll文件时,请将它们放在Web服务器上的某个位置。然后运行python包提供的'symstore'命令,例如

symstore / var / www / symbols pdb1 pdb2 ...

这会将所有指定的文件复制到/ var / www / symbols的正确子目录中,并在符号存储的元文件中创建一个事务条目。

symstore包还提供了一个python API,因此可以从任何python进程以编程方式进行发布。

Symstore软件包安装说明在此处:https://pypi.python.org/pypi/symstore/0.1.1

答案 2 :(得分:2)

更新:请参阅more detailed answer of mine


假设您是所有符号的管理员,您可以这样做:

  1. 使用symstore.exe在您的计算机上创建“主”符号存储区。
  2. 创建新的虚拟主机或使用现有域并创建用于存储符号的子目录。
  3. 将完整的主符号存储上传到目录
  4. 要添加新符号,请再次在Windows计算机上执行symstore.exe。然后再次上传所有文件。您可以跳过服务器上已存在的服务器,pingme.txt除外。现有文件不应更改,否则它们的哈希值也应该不同,这意味着它们位于不同的子目录中。

    您可能希望保护您的符号不被访问。 WinDbg支持.htaccess.htpasswd,至少支持基本身份验证。我想你很熟悉。