代码之家  ›  专栏  ›  技术社区  ›  Jay Conrod

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

  •  4
  • Jay Conrod  · 技术社区  · 15 年前

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

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Dimitri Tcaciuc    15 年前
        2
  •  3
  •   Tom    15 年前

    Here 他们建议使用 tprof :

    你试过瓦林吗?

    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可能会混合在一起,这通常会使其无效。