2011-05-07 29 views
0

我正在使用由几千个C++头文件和类文件组成的Physics Toolkit(Geant4)。为了使用这个工具箱,你必须编写一系列你自己的类文件,这些文件给工具箱一些关于你想要建模的基本信息。然后你写一个main()文件,用这个工具包注册这些文件,'make'它然后执行最终的程序。我正在使用Ubuntu 10.10作为执行此操作的平台。如何找出什么类被调用了哪些函数?

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

一个有点蛮力的方法是标记每个文件中的每个函数,例如插入cout < <“文件名,函数名”< < endl作为每个函数体中的第一条语句并将此全部输出到文本文件中。但是,我需要经历大约3000个文件,这会花费很多时间。

有没有更简单的方法来找出哪些功能被称为?我已经通过工具包手册进行了搜索,除非我错过了某些东西,否则我无法通过工具包进行此操作。我想我会在终端或外部程序中需要一些命令?!?

任何帮助,建议或建议将不胜感激!

回答

1

我建议你使用Doxygen和GraphViz为你做这个。这是一个excellent answer,这应该让你开始。我希望这是你正在寻找的。

+0

好,感谢您的意见。我设法安装了doxygen并运行它来成功地记录Geant4的源文件。在我进一步讨论之前,我对这是否是正确的事情有怀疑......因此,这个程序会给我一个关于这个工具包和文件依赖关系的完整文档,对吗? 唯一的问题是我没有看到这会告诉我该工具包是如何运行我创建的程序的。这只是告诉我一般工具包*如何相互作用,但它不会告诉我在运行我的特定程序时它的作用?或者我错过了什么? – 2011-05-07 23:03:40

+0

不,你说得对。如果您想要一般流程可视化(典型)或每次运行(在C/C++中很难做到),我不是100%确定的。这仍然是一个有价值的工具,但看起来并不完全符合你的需求。 – 2011-05-08 00:06:26

+0

这很好。感谢您的输入。你是对的;它看起来是一个非常有用的工具,如果你没有提出它,我可能不会找到它。我在博士学位期间会做很多编码工作,所以我毫不怀疑它早晚会将我从编码沮丧的深处解救出来! :) – 2011-05-08 09:28:34

2

在Ubuntu上,您可以选择配置文件。

我个人喜欢

valgrind --tool=callgrind ./myprogram 
kcachegrind 

对于这一点,因为它创造很好的调用图和统计数据(树地图可视化)。

大常见问题探查话题是在这里:How can I profile C++ code running in Linux?

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

相关问题