输出最长调用链的工具

时间:2013-05-31 14:20:52

标签: static-analysis call-graph

上下文:我正在执行此处描述的分析程序:approach

阻止点正在查找正在观察的项目的“最长调用链”。找到这个可以用什么工具?我认为它将是一个静态分析工具。

否则,我假设一个调用图生成器可用于此目的。但是,如何推断出最长的电话链?

1 个答案:

答案 0 :(得分:1)

就跳数而言,“最长”的调用链可以直接从调用图中确定。这假设你已经获得了一个,是的,这通常需要静态分析。 (您可以获得动态生成的调用图,但它可能不会显示所有可能的调用)。为firefox获取一个函数调用跨越语言边界,如果你想考虑这些,可能会非常具有挑战性。

给出这样一个调用图: 从调用图开始,每个节点都有空白的调用路径长度值。使用call-path-length值0标记根(您的调用图可能是DAG)。对于已确定所有父项的每个未标记的子项,使用父项的值的最大值标记该子项,加1.重复直到所有孩子都贴上标签。 [如果在调用图中有一个循环,则必须决定忽略它,或将其视为路径长度的一些常量添加。]从最高值节点开始,向后行走,可以轻松提取最长路径到达最贵的父母,直到达到根。

[编辑]如果您将叶子值传播给父母,您可以最终得到图表,每个节点都标记为它到达的距离。

你确定你想要最长链吗?或者你想要最坏的案件执行时间?