找出函数调用的起源

时间:2011-01-02 13:53:08

标签: c linux

我想知道是否有软件可以帮助我们确定函数调用的所有可能来源。 例如:

/* in file f1.c */
int f1() {
 x_func();
}

/* in file f2.c */
int f2() {
 x_func();
}

如果我们想跟踪所有函数调用x_func()的来源,输出将为:

f1.c:f1()
f2.c:f2()

这在阅读源代码时非常有用。 所有答案都表示赞赏。提前感谢:D

4 个答案:

答案 0 :(得分:2)

cscope可以提供帮助

答案 1 :(得分:1)

如果你想在运行时使用它,任何调试器都可以这样做:只需在x_func内放置一个断点,并在它暂停时打印堆栈跟踪。

答案 2 :(得分:0)

Doxygen会为你做这件事(带照片!)。

此外,许多IDE还包含此类功能,例如,Visual Studio将生成文本调用图以及“查找所有引用”搜索。您可以使用免费的VC ++ Express Edition执行此操作,该项目不必是VC ++项目即可使用其代码导航功能,只需创建一个makefile项目并将头文件路径添加到预处理器设置。

答案 3 :(得分:0)

Tagfile程序,例如ctags和etags,可以做到这一点。它们是为编辑而编写的,而不是具体的人类可读性。 Emacs的M-。 key在标记文件中查找。