高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

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

  • 2017-08-23
  • 本文字数:1230 字

    阅读完需:约 4 分钟

要使用上 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

2017-08-23 19:001027
用户头像

发布了 227 篇内容, 共 66.5 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

Python 实战(五)| 字符串

JavaFish

5分钟速读之Rust权威指南(四十二)高级函数

码生笔谈

rust

有趣的SVG、Favicon

devpoint

favicon SVG 7月日更

要性能还是要模型?

escray

学习 极客时间 7月日更 如何落地业务建模

hdfs中抽象为block块的好处

五分钟学大数据

hdfs 7月日更

模块2作业

Tina

Liunx之chown命令

入门小站

Linux

百分点大数据技术团队:ClickHouse国家级项目性能优化实践

百分点科技技术团队

昇腾AI的三级跳

脑极体

如何通过代码审计从三层内网各种漏洞拿到域控?

网络安全学海

黑客 网络安全 信息安全 安全漏洞 渗透测试·

JDBC数据库链接的那些事

卢卡多多

JDBC 7月日更

架构实战营 模块二 作业

一雄

作业 架构实战营 模块二

高阶的产品经理是什么样的?

石云升

产品经理 职场经验 7月日更

我佛了!花重金求来的并发编程笔记,颠覆了我以往“正确“的认知

Java 编程 程序员

毕业1年,凭借一份 “漫画” 杀进大厂?他是怎么做到的?原理篇+框架篇

Java架构师迁哥

Python 正则表达式急速入门

喵叔

7月日更

博睿数据亮相2021中国互联网大会,践行数字政府新路径

博睿数据

博睿数据 数据链DNA

phabricator + gitlab 强制code review

阿呆

gitlab Code Review phabricator

【得物技术】零拷贝

得物技术

io 网络 零拷贝 流程 传输

极光开发者周刊【No.0716】

极光JIGUANG

终于学完了阿里P8大牛推荐的527页Java性能优化实践文档

Java 编程 架构 面试

Ping Exporter -- Prometheus

耳东@Erdong

Prometheus ping 7月日更 exporter

百分点数据科学实验室:智慧应急安全生产智能决策方案建设实践

百分点科技技术团队

🐧【Linux技术专题系列】「必备基础知识」一起探索(用户、用户组与文件权限)

洛神灬殇

Linux 操作系统 linux 文件权限控制 7月日更

模块二作业

VE

架构实战营

北鲲云超算:以HPC解决方案助力生命科学领域研究发展

北鲲云

【通证经济】价值、应用、市场,被掩盖的区块链宝藏!!

CECBC

作为程序员,遇到问题时你的解决手段是什么?

阿杰

程序员

架构实战营模块二作业

Clarke

架构实战营

Spark SQL和DataFrames:内置数据源简介(四)

数据与智能

spark sparksq

LLVM构建了PDB文档,并提供了PDB与YAML的转换工具_语言 & 开发_Jonathan Allen_InfoQ精选文章