有没有一种简单的方法可以找到哪些其他函数可以从源代码中调用某个函数?

时间:2010-01-13 16:38:19

标签: c language-agnostic

我有一个函数,在我的代码库中由其他4个函数显式调用。然后,在我的代码中,至少有10个其他函数调用这些函数中的每一个。我知道我可以手动将这些函数调用中的一个跟踪到我的程序的主函数(它有30个函数调用),但似乎这对计算机来说是一个更好的工作。我只是想知道main()中哪些函数正在调用这个隐藏函数。

有谁知道任何有用的软件?

此外,使用调试器是不可能的。那太简单了。该软件仅在手持设备上运行。

5 个答案:

答案 0 :(得分:9)

正确配置的

doxygen能够为代码中的每个函数输出带有可导航调用者列表和被调用列表的HTML文档。您也可以生成调用图。

答案 1 :(得分:2)

评论它(或更好,注释掉它的原型)并尝试编译你的程序。您应该看到它被引用的位置。

答案 2 :(得分:1)

如果您的平台有一个用于捕获回溯的API,我会设置该函数以使用它们并将它们记录到文件中以供以后分析。无法保证这将找到所有呼叫者(或呼叫者的呼叫者),但如果您在记录这些时执行所有程序功能,则应找到“大多数”。对于相对简单的程序,可以通过这种方式查找所有呼叫者。

或者,许多采样工具可以为您提供此信息。

但是,我怀疑你可能在一个没有很多这些功能的平台上,所以静态源分析工具(如 mouviciel 建议)可能是你最好的选项。假设你可以让它为你工作,这有额外的好处,它应该找到所有调用者,而不仅仅是大多数

答案 3 :(得分:1)

http://cscope.sourceforge.net/我认为这也很有用。

答案 4 :(得分:1)

我是第二个mouviciel建议使用doxygen获取此信息。缺点是doxygen正在处理源代码。您只能看到可能会调用您的函数的函数,而不是那些实际调用函数的函数。如果您使用的是Linux,并且可以更改相关函数的源代码,则可以使用backtrace()和backtrace_symbols()函数获取此信息。