C 查找在多进程程序中调用哪些函数而不修改源?

C 查找在多进程程序中调用哪些函数而不修改源?,c,linux,profiling,code-coverage,gprof,C,Linux,Profiling,Code Coverage,Gprof,我正在从事一个项目,在这个项目中,我需要找到在给定特定输入的各种Linux程序(用C编写)中调用哪些函数。我目前的方法是使用-pg(profiling选项)编译一个程序,运行它,并通过处理gprof的输出找到调用哪些函数。输出文件中仅显示至少调用一次的函数 明显的问题是只有一个进程可以写入gprof输出文件。如果程序分叉多个进程,我不会从其他进程获得任何分析输出 有没有办法让gprof为每个进程生成一个输出文件(可能用pid标记)?手册建议将每个进程更改为不同的目录,但我不想修改源代码来实现这一

我正在从事一个项目,在这个项目中,我需要找到在给定特定输入的各种Linux程序(用C编写)中调用哪些函数。我目前的方法是使用-pg(profiling选项)编译一个程序,运行它,并通过处理gprof的输出找到调用哪些函数。输出文件中仅显示至少调用一次的函数

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

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

他们建议使用:

你试过valgrind吗

——fork之后的子级静默=[默认值:否]

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

看看GCov:

GCov也有同样的问题。未报告子进程的覆盖范围。
--child-silent-after-fork=<yes|no> [default: no]