【问题标题】:Trace all calls from a program?跟踪来自程序的所有调用?
【发布时间】:2011-04-29 12:14:50
【问题描述】:

一个程序安装在 2 台计算机上。某个库在一台计算机上正常工作,但在另一台计算机上根本不工作。我想知道是否缺少图书馆。

我正在使用 strace,因此我可以查看程序在运行时正在调用哪些库。 strace 提到的所有库都是正确的,但 strace 是否还检测一个库是否调用另一个库或文件?有什么方法可以检测到这种情况?

【问题讨论】:

    标签: c linux trace


    【解决方案1】:

    是的,strace 将检测来自已加载库的调用。

    如果您想跟踪库调用(不是系统调用),请使用 ltrace

    【讨论】:

      【解决方案2】:

      听起来您想查看应用的函数调用图,即哪些函数相互调用、它们所在的库等。如果是这样,您可能需要查看@987654321 @(这是 valgrind 的一部分)。

      这是一个使用callgrind to profile some code 的示例。

      使用 callgrind 为您的应用生成配置文件数据后,将其加载到 Kcachegrind 以将其可视化。这是简单的点击:突出显示功能,查看调用者/被调用者,查看调用图,等等。我发现它在类似情况下非常有用。

      【讨论】:

      • 斯坦福的链接受密码保护:(.
      【解决方案3】:

      要检查缺少的库,请运行 ldd /full/path/to/program

      【讨论】:

        【解决方案4】:

        对于使用Clang 编译的程序,尝试获取Xray 程序的调用跟踪。它启发式地检测程序的一部分,并且运行时开销非常低。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-12
          • 2013-05-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多