4

我正在做一个项目,我需要在给定特定输入的情况下找到在各种 Linux 程序(用 C 编写)中调用哪些函数。我目前的方法是使用 -pg(分析选项)编译一个程序,运行它,然后通过处理 gprof 的输出来查找调用了哪些函数。只有至少被调用一次的函数才会出现在输出文件中。

明显的问题是只有一个进程可以写入 gprof 输出文件。如果程序分叉多个进程,我不会从其他进程获得任何分析输出。

有没有办法让 gprof 为每个进程生成一个输出文件(可能由 pid 标记)?该手册建议将每个进程更改为不同的目录,但我不想修改源代码来执行此操作。是否有其他适用于 Linux 的工具可以提供帮助?

4

2 回答 2

3

他们在这里建议使用tprof

你试过valgrind吗?

http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html

--child-silent-after-fork=<yes|no> [default: no] 

启用后,Valgrind 不会显示由 fork 调用产生的子进程的任何调试或日志输出。在处理创建子进程时,这可以使输出不那么混乱(尽管更具误导性)。它与 --trace-children= 结合使用特别有用。如果您正在请求 XML 输出 (--xml=yes),也强烈建议使用此标志,因为否则来自子和父的 XML 可能会混淆,这通常会使其无用。

于 2009-04-28T03:23:27.230 回答
2

看看 GCov:http ://gcc.gnu.org/onlinedocs/gcc/Gcov.html

于 2009-04-28T03:25:30.813 回答