【发布时间】:2014-01-10 18:10:42
【问题描述】:
我希望能够生成一个通信/调用图,其中包含有关函数之间传递的数据量的信息。
例如:
function1() -----> [Object *ptr] ----> function2()
这意味着函数 1 将指向对象的指针传递给函数 2(反之亦然)。但是,如果 *ptr 指向一个 1MB 的对象(比如说)。那么图表应该看起来像:
function1() ----> [Object *ptr::1MB] -----> function2()
这将使我们大致了解如何(以及数据的类型/大小/格式)传递。看起来像:
- http://cms.uni-kassel.de/unicms/uploads/pics/TASK_GRAPH_01.JPG
- http://www.prace-ri.eu/IMG/png/gprof.png
我可以通过使用 gprof 分析和 gprof2dot 脚本获得类似 (2) 的图形,但它的输出仅显示 cpu 使用百分比。我也想看看它们之间传递的数据量。
是否有可以提供此信息的工具(开源/商业),或者您是否知道可用于获取此信息的工具组合?
(我正在考虑结合 Valgrind + gprof 的分析,但想知道是否有更直接的方法..
非常感谢!
【问题讨论】:
-
问题是指针(在 C 中)你不知道它们指向的大小。 'int *' 可能是 0、1、5、100 或 1500000 的数组。如果它是 void *,则所有赌注都关闭。我不知道有任何程序化的方式来做到这一点。
-
我会为此使用graphviz。
标签: c memory profiling code-analysis callstack