c - 如何检查某个函数是否可以被另一个特定函数间接调用?
问题描述
假设在一个 C 语言编写的项目中,有一个名为的函数A
和一个名为 的函数B
。
如何验证函数 A 是否在函数 B 的调用树中?就像 B->C->D->...->A 一样。
当我在考虑哪个libvirt
API 可以调用 qemu qmp“查询块”时,这个问题就来了。由于 qmp "query-block" 仅由 function 调用qemuMonitorJSONQueryBlock
。所以这个特定的问题变成了:我怎样才能找到哪个libvirt
API 可以调用qemuMonitorJSONQueryBlock
?
我认为动态分析很难回答这个问题,因为需要进行大量测试。应该是静态分析的问题。但我可以找到合适的工具或方法来解决它。最后,我将问题总结为第一段。
解决方案
您可以尝试CppDepend及其代码查询语言来创建一些有关依赖项的高级查询,在这种情况下,您可以使用这样的查询
from m in Methods
let depth0 = m.DepthOfIsUsedBy("__Globals.B()")
where depth0 >= 0 && m.SimpleName=="A" orderby depth0
select new { m, depth0 }
推荐阅读
- c++ - 如何使用二叉搜索树指针纠正 C++ 内存泄漏?
- mysql - 如何通过查看上月名,将缺失的月份名依次添加到sql表中?
- android - Whatsapp 链接
- ios - AVAudioSession 将类别设置为没有选项的播放无法在 AirPods 上播放,也设置没有选项的类别将不会应用媒体信息
- python - 我无法从 flask_sqlalchemy 和 flask_wtf.csrf 导入,即使我为两者都安装了 pip。在我得到一台新电脑之前它正在工作
- java - 在 Netbeans IDE 中,我得到一个 Javadoc not found 错误,我已经阅读了类似的问题,但没有一个给出的解决方案有效
- java - Maven 模块的 Eclipse 设置
- python - 将元组的每个元素拆分为新行
- typescript - 如何编写递归函数以在 TypeScript 中获取树结构中的顶级父级
- linux - Linux终端没有响应任何键盘信号