跟踪程序中的所有呼叫?

时间:2011-04-29 12:14:51

标签: c linux trace

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

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

听起来你想要查看你的应用程序的函数调用图,即哪些函数相互调用,它们所在的库,等等。如果是这样,你可能想查看{{ 3}}(这是valgrind的一部分)。

以下是使用callgrind tool的示例。

一旦您使用callgrind为您的应用生成个人资料数据,请将其加载到callgrind to profile some code以进行可视化。它是简单的点击:突出显示功能,查看呼叫者/被叫者,查看呼叫图,等等。我发现它在类似情况下非常有用。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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