如何找出从哪些类调用的函数?

时间:2011-05-07 22:00:22

标签: c++ function

我正在使用物理工具包(Geant4),它包含数千个C ++头文件和类文件。为了使用该工具包,您必须编写一系列自己的类文件,这些文件为工具箱提供了有关您要模拟的内容的一些基本信息。然后编写一个main()文件,用工具包注册这些文件,'make'然后执行最终程序。我使用Ubuntu 10.10作为平台来执行此操作。

我想更好地了解工具包的运作方式。具体来说,我想在程序运行时找出整个工具包中哪些类文件中的哪些函数被调用以及以什么顺序调用。

一种有点强力的方法是标记每个文件中的每个功能,例如insert cout<< “文件名,功能名称”<< endl作为每个函数体中的第一个语句,并将所有输出都输出到文本文件中。但是,我需要处理大约3000个文件,这有点......耗时。

有没有更简单的方法来找出调用了哪些函数?我已经搜索了工具包手册,除非我遗漏了一些东西,否则我看不到通过工具包做到这一点。我想我在终端或外部程序需要一些命令?!?

非常感谢任何帮助,建议或建议!

2 个答案:

答案 0 :(得分:2)

在ubuntu上,您可以选择分析器。

我个人喜欢

valgrind --tool=callgrind ./myprogram
kcachegrind

为此,因为它创建了非常好的调用图和统计信息(树图可视化)。

常见的常见问题解答分析器主题位于:How can I profile C++ code running in Linux?

关闭我的头顶:gprof(需要仪器),oprofile和perf record -g也很容易上手

答案 1 :(得分:1)

我建议您使用Doxygen和GraphViz为您执行此操作。这是excellent answer,应该可以帮助您入门。我希望这就是你要找的东西。