BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

LLVM构建了PDB文档,并提供了PDB与YAML的转换工具

| 作者 Jonathan Allen 关注 244 他的粉丝 ,译者 Rays 关注 1 他的粉丝 发布于 2017年8月24日. 估计阅读时间: 4 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

要使用上Windows平台提供的丰富工具,需要LLVM等编译器编写者可以生成PDB格式的文件。PDB,即程序调试数据库(Program Debug Database),是一种字符数据库,它描述了Windows平台上编译的代码。由于PDF文件中包含了各种类型的记录,因此它使得调试器等工具可以实现被编译代码和源代码间的映射。

出于提高性能的考虑,PDB中的记录数据是高度索引的。问题也正部分源于此,LLVM的Windows团队成员Zach Turner给出了如下介绍:

CodeView是Microsoft在上世纪八十年代创立的一种调试信息格式。但是出于种种原因,其它的调试器另外开发了一种称为DWARF的独立格式。DWARF格式最终成为了标准,当前得到了很多编译器和编程语言的支持。类似于DWARD,CodeView定义了一系列记录,描述了源代码行和代码地址间的映射,以及程序所使用的类型和符号。调试器进而使用这些信息,让用户可以实现通过函数名设置断点、显示变量的值等调试功能。但是CodeView的文档并不完整,而且最新的官方文档也是20年前的。尽管一些记录的格式并未发生变化,但是其它不少记录的格式已经进化了,并引入了全新记录。这些记录的文档并不存在。

[……]

(PDB中)包括了CodeView,此外还包括了很多其它的内容,以允许使用各种方式索引CodeView记录。这使得PDB可以支持通过名字和地址对类型和符号的快速查找、对于单个输入文件建立类似于“数据表”的功能,以及其它多种功能,这些功能虽然对用户是不可见的,但是它们在很大程度上实现了Windows上所提供的无与伦比的调试体验。

Microsoft提供了一些操作PDB文件的工具和SDK,但是并未提供任何可以生成PDB文件的工具。即便是这些工具,也需要使用一些专用库,因为开源PDB代码甚至从未得以编译

根据由Microsoft上传的部分代码,LLVM团队构建了自己的PDB生成器。虽然该生成器依然被认为是处于“试用版的质量”,但是它支持应用使用CLANG和LLVM后端编译,可以开始与Windows工具合作工作。Turner继续指出:

我们希望用户能尝试使用该工具,并在我们的软件缺陷跟踪网站上报告问题。但是开始时,你需要下载用于Windows平台Clang的最新快照

作为LLVM团队支持PDB格式的探索性工作的一部分,LLVM构建了PDB格式的文档。虽然这些文档并非十分完善,但是对于查看这一从前并不可用的复杂格式,上述文档提供了一个重要的窗口。

作为文档的辅助工具,LLVM团队还构建了一个称为llvm-pdbutil的工具。该工具的功能之一就是支持在YAML和PDB间的双向转换。(在此对不了解YAML的读者做一个简介。YAML是一种人们可阅读的格式,它使用的是空格而非大括号。YAML可能是在API文档语言RAML所用的格式中最广为人知的。)

需指出的是,现实中存在着两种PDB格式。除了我们上面介绍的PDB完整版,还有一种称为Portable PDB的格式,该格式针对.NET Core应用。为方便阅读,Portable PDB的文档使用了开源库。

查看英文原文: LLVM has Documented the PDB Format, Complete with PDB to YAML Conversion

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT