在可执行文件的库中进行“打开”调用

时间:2015-06-03 09:35:00

标签: linux unix execution tracing strace

我有一个没有源代码的程序。

当我运行它时,我在日志中出现“无法打开文件...”错误。

我打电话给 strace 跟踪内核上的 open 调用,以这种方式:

strace -e trace=open,close,read,write,connect,accept your-command-here

但是,似乎没有任何我期待的 open 调用(在日志显示“无法打开文件......”之前会发生这种情况)

可执行文件确实将 open 调用委托给了一个tierce库。 似乎 strace 仅跟踪来自内核上可执行文件的调用,而不是跟踪库依赖项中的调用。

我尝试使用 ltrace 来跟踪后续库中发生的事情,但它没有显示与 strace 相同的信息,只显示函数调用(不是人类)可读)。

有没有办法在可执行文件和图书馆同时运行 strace

1 个答案:

答案 0 :(得分:3)

strace应该显示所有open次来电。但是:

  • 也许您的应用程序调用子进程来完成工作。对于这种情况,您可以添加-f选项。
  • 另一方面,它可能通过打开与另一个进程的套接字(或类似)连接来完成工作。对于这种情况,您将看不到任何痕迹。同样,如果您使用syslog接口,那么实际工作可能在您的流程之外完成,可能在您无法使用此工具跟踪的内核中完成。