llvm - 在 xvcg 中显示来自 llvm 的 CFG

标签 llvm control-flow-graph vcg xvcg

llvm的opt程序中有-view-cfg选项(doc),它使我能够通过dot查看控制流图程序。但 CFG 太大,无法从点渲染为附记。我知道有xvcg utiity能够显示复杂的图形,包括 CFG(及其 man 表示“VCG 工具 - 编译器图形的可视化”)。

那么,如何以xvcg格式输出llvm的CFG呢?

最佳答案

直接从 LLVM 生成 .vcg 文件需要对 GraphWriter 进行大量修改,这是 GraphViz 特有的。相反,在我看来,最直接的解决方案是保存点文件(通过 -dot-cfg 而不是 -view-cfg),然后转换它,使用类似Graph-Easy的东西。从它的文档(强调我的):

It understands the following formats as input:

The output can be a dump of the graph in one of the following formats:

顺便说一句,如果您想要获取大量图表并希望在生成大量点文件之前查看它们,请考虑使用点查看器,它还允许您保存文件,例如 my fork of xdot.py - 或者更好的是,修改 xdot.py 以便它知道如何使用 Graph-Easy 本身以 .vcg 格式保存。

Graph-Easy 的另一个替代方案似乎是 dot2gdl .

关于llvm - 在 xvcg 中显示来自 llvm 的 CFG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062495/

相关文章:

assembly - 如何从汇编生成控制流图?

c++ - 需要帮助使用 g++ 编译 vcglib 代码

file - 如何使用vcglib保存颜色?

x86 - 为什么 0xE1 0x4F 在 LLVM 和 NDISASM 中反汇编为不同的指令?

operating-system - x86准系统上的llvm?

multithreading - 制作基本 OpenMP 类库的最简单方法

c# - 如何在控制流图中表达 Try/Catch?

c++ - 为什么 Clang 会自动向我的函数添加属性?

python - 查找函数输出的输入依赖关系

c++ - 在 VCG 中创建超过 400k 顶点的 VertexPointer 时程序崩溃