在不修改源的情况下查找在多进程程序中调用哪些函数?

时间:2009-04-28 03:15:02

标签: c linux profiling code-coverage gprof

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

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

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

2 个答案:

答案 0 :(得分:3)

Here他们建议使用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可能会混淆,这通常会使其无效。

答案 1 :(得分:2)