strace 'open' 在可执行文件库中调用

mat*_*att 4 unix linux trace execution strace

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

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

我以这种方式调用了strace来跟踪内核上的打开调用:

strace -e trace=open,close,read,write,connect,accept your-command-here
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有我期望的打开调用(这将在日志显示“无法打开文件...”之前发生)

可执行文件确实将打开调用委托给了 tierce 库。似乎strace只跟踪内核上可执行文件的调用,而不是库依赖项的调用。

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

有没有办法同时在可执行文件和库上运行strace

Tho*_*key 5

strace应该显示所有的open电话。然而:

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