问题标签 [call-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1076 浏览

java - 生成调用图的好算法?

我正在编写一些代码来为特定的中间表示生成调用图,而无需通过静态扫描 IR 代码来执行它。IR 代码本身并不太复杂,我对函数调用序列的外观有很好的理解,所以我需要做的就是跟踪调用。我目前正在以明显的方式进行操作:

  • 跟踪我们的位置
  • 如果我们遇到一个函数调用,分支到那个位置,执行并返回
  • 分支在调用者和被调用者之间设置边缘

我对自己的进展感到满意,但我想确保我不会在这里重新发明轮子并面对极端情况。我想知道是否有任何公认的好的算法(和/或设计模式)可以有效地做到这一点?

更新: IR 代码是从自制的类似 Java 语言的字节码反汇编,看起来像Jasmine 规范

0 投票
1 回答
374 浏览

call-graph - 如何使用 PC-Lint 生成调用图?

我无法弄清楚如何使用 PC-lint 生成调用图。

我尝试将 -vhm 标志添加到 pc lint 但没有任何反应。

谁能告诉我如何让 PC-Lint 生成调用图?

0 投票
8 回答
70661 浏览

c++ - 如何为 C++ 代码生成调用图

我正在尝试生成调用图,用它来找出所有可能的执行路径,这些路径是命中特定函数的(这样我就不必手动找出所有路径,因为有很多路径导致这个函数)。例如:

我试过 Codeviz 和 Doxygen,不知何故,这两个结果都只显示目标函数 D 的被调用者。在我的例子中,D 是一个类的成员函数,其对象将被包装在一个智能指针中。客户端将始终通过工厂获取智能指针对象,以便调用 D。

有谁知道如何实现这一目标?

0 投票
8 回答
10930 浏览

javascript - 是否有用于 JavaScript 的静态调用图和/或控制流图 API?

是否有 JavaScript 的调用图和/或控制流图生成器?

调用图 - http://en.wikipedia.org/wiki/Call_graph

控制流图 - http://en.wikipedia.org/wiki/Control_flow_graph

编辑:我正在寻找一个静态工具,让我可以使用一些 API/代码访问图表

0 投票
3 回答
5885 浏览

c++ - 生成调用流图的工具【C C++ solaris linux】

我非常喜欢IDA,但我正在 Solaris 上从事这个项目。我确实有一台 linux 机器,如果没有任何东西与 IDA 处于同一级别,那么我会说服管理层为其购买许可证。

除此之外,我正在寻找替代建议。IDA 中的其他一些功能会很方便,但我目前需要的主要是一个基于源代码的调用流图生成器。如果它需要构建步骤的额外输出,那很好,但是我需要查看的一些库我没有源代码。

到目前为止,看起来我最好的选择是 Valgrind 的Callgrindlidagprof。欢迎任何进一步的建议。

回复:gprof,Windriver 提供给我们的 GNU 编译器集缺少一些库,这些库通常会随 GNU 编译器一起提供,以提供(除其他外)性能分析工具。这是解决更普遍问题的好方法,但现在我选择先尝试其他解决方案。

编辑一些 Rational 工具(Purify、Quantify 等)可能也适用于此。我和 IDA 在同一条船上,但我认为有人用谷歌搜索可能会发现这个建议很有帮助。

edit2 Valgrind 尚未移植到 solaris/sparc ;p

0 投票
2 回答
571 浏览

fxcop - 静态调用图分析解决了哪些问题?

希望在程序上使用静态调用图分析来发现哪些问题?FxCop 使用静态调用图分析,使用这种技术发现了什么问题?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph

抱歉我缺乏知识,我通过谷歌找到了一些信息,但担心它非常不完整。谢谢!

0 投票
1 回答
2415 浏览

android - 在 Android 中生成调用图

在 Eclipse 中生成 android 应用程序的调用图有哪些可能的工具?我想知道哪些方法相互作用......但我似乎找不到任何有用的东西。我读过一些关于 Oprofile 的文章,但很多人说它不起作用并且包含很多问题。我想在 android 中可视化我的代码以开发更好的应用程序。

谢谢

0 投票
2 回答
438 浏览

c# - 确定一个方法是否调用另一个包含新语句的程序集中的方法,反之亦然

我想编写一个规则,如果在标记有特定属性的方法调用的任何方法中进行对象分配,则该规则将失败。

到目前为止,我已经完成了这项工作,通过迭代所有调用我的方法的方法来检查 using CallGraph.CallersFor(),以查看是否有任何父方法具有该属性。

这适用于检查与要检查的方法相同的程序集中的父方法,但是在线阅读时,似乎CallGraph.CallersFor()曾经查看过所有程序集,但现在没有。

问题:有没有办法获取调用给定方法的方法列表,包括不同程序集中的方法?

替代答案:如果上述方法不可行,我如何遍历给定方法调用的每个方法,包括不同程序集中的方法。


例子:

我真的不介意规则在哪里报告错误,在这个阶段得到错误就足够了。

0 投票
0 回答
1157 浏览

valgrind - 如何使用 Callgrind 生成多进程应用程序的简单调用图?

我对 Valgrind Callgrind 有疑问。

我需要生成一个应用程序的调用图,但是这个应用程序启动了几个进程。我使用了 Valgrind 的 --trace-children=yes 选项,但这会生成几个不同的 callgrind 输出文件。

有没有办法将这些文件组合在一起只有一个调用图?即使是组合多个文件的工具也是完美的,但我什么也没找到。

谢谢

0 投票
1 回答
177 浏览

dependencies - 指向分析 - 定义

我希望使用我将使用 Soot 框架构建的调用图来执行一些依赖关系分析。我在指南中读到使用“指向”分析可以提高调用图的精度。究竟什么是“指向”分析,它如何提高调用图的准确性?