程序安装在2台计算机上。某个库在一台计算机上正常工作但在另一台计算机中根本不工作。我想知道是否遗失了一个图书馆。
我正在使用strace,所以我可以看到程序在运行时调用了哪些库。 strace提到的所有库都是正确的,但是strace还会检测一个库是否调用另一个库或文件?有没有办法检测这种情况?
答案 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
获取程序的调用跟踪。它启发式地检测程序的一部分,并且运行时开销非常低。