首页 > 解决方案 > 如何检查某个函数是否可以被另一个特定函数间接调用?

问题描述

假设在一个 C 语言编写的项目中,有一个名为的函数A和一个名为 的函数B

如何验证函数 A 是否在函数 B 的调用树中?就像 B->C->D->...->A 一样

当我在考虑哪个libvirtAPI 可以调用 qemu qmp“查询块”时,这个问题就来了。由于 qmp "query-block" 仅由 function 调用qemuMonitorJSONQueryBlock。所以这个特定的问题变成了:我怎样才能找到哪个libvirtAPI 可以调用qemuMonitorJSONQueryBlock

我认为动态分析很难回答这个问题,因为需要进行大量测试。应该是静态分析的问题。但我可以找到合适的工具或方法来解决它。最后,我将问题总结为第一段。

标签: cstatic-analysis

解决方案


您可以尝试CppDepend及其代码查询语言来创建一些有关依赖项的高级查询,在这种情况下,您可以使用这样的查询

    from m in Methods 
let depth0 = m.DepthOfIsUsedBy("__Globals.B()")
where depth0  >= 0 && m.SimpleName=="A" orderby depth0 
select new { m, depth0 }

在此处输入图像描述


推荐阅读