生成 C 代码调用图
本文探讨了为 C 代码创建调用图的技术,特别是在尝试识别所有 C 代码调用图时导致特定函数的可能执行路径。
创建调用图
为了满足这一需求,一种方法是利用 LLVM 优化管道。这可以通过使用 -S 和 -emit-llvm 标志编译代码,然后通过 opt 工具使用 -analyze 和 -dot-callgraph 选项来实现。例如:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph $ dot -Tpng -ocallgraph.png callgraph.dot
此命令生成一个表示潜在执行路径的调用图,以可视化图表的形式进行描述。
自定义调用图表示
在某些情况下,对调用图进行后处理以增强可读性可能会有好处。一种方法是使用 c filt 来获取未损坏的函数和类名称。以下示例演示了此过程:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -std-link-opts -dot-callgraph $ cat callgraph.dot | c++filt | sed 's,>,\>,g; s,-\>,->,g; s,<,\<,g' | gawk '/external node/{id=} != id' | dot -Tpng -ocallgraph.png
通过应用此修改后的图,可以更轻松地识别每个路径中涉及的特定函数和类。
以上是如何生成C代码调用图来分析执行路径?的详细内容。更多信息请关注PHP中文网其他相关文章!