我正在做一个项目,我需要找到在给定特定输入的各种 Linux 程序(用 C 编写)中调用了哪些函数。我目前的方法是使用 -pg(分析选项)编译一个程序,运行它,然后通过处理 gprof 的输出找到调用了哪些函数。只有至少被调用一次的函数才会出现在输出文件中。
明显的问题是只有一个进程可以写入 gprof 输出文件。如果程序 fork 多个进程,我不会从其他进程获得任何分析输出。
有没有办法让 gprof 为每个进程(可能用 pid 标记)生成一个输出文件?该手册建议将每个进程更改为不同的目录,但我不想修改源代码来执行此操作。是否有其他适用于 Linux 的工具可以提供帮助?
最佳答案
你试过 valgrind 了吗?
http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html
--child-silent-after-fork=<yes|no> [default: no]
启用后,Valgrind 将不会为派生调用产生的子进程显示任何调试或日志输出。在处理创建子进程时,这可以使输出不那么困惑(尽管更具误导性)。它与 --trace-children= 结合使用特别有用。如果您请求 XML 输出 (--xml=yes),也强烈建议使用此标志,否则来自子项和父项的 XML 可能会混淆,这通常会使它变得无用。
关于c - 在不修改源码的情况下查找多进程程序中调用了哪些函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796086/