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

标签 c linux profiling code-coverage gprof

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

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

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

最佳答案

Here他们建议使用 tprof :

你试过 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/

相关文章:

c++ - 对共享变量的无保护访问总是数据竞争吗?

c - 如何删除任意 HWND 边框 (WinAPI)?

linux - vagrant ssh -c 并在连接关闭后保持后台进程运行

linux - 找到文件后如何复制

windows - 在 Xperf 中捕获调用堆栈和事件

python - 为什么 Python 代码在函数中运行得更快?

c - 为什么这个简单的C命令行工具总是退出而不工作?

c - C中数组指针问题

c - 强制操作系统在后台运行一个没有其他程序的程序

profiling - 将 pprof 与 gperftools 一起使用会导致 curl 错误