strace 'open' 在可执行文件的库中调用
strace 'open' calls in a library of an executable
我有一个没有源代码的程序。
当我 运行 它时,我在日志中有一个 "Can't open file..." 错误。
我调用了 strace 来跟踪内核上的 open 调用,这样:
strace -e trace=open,close,read,write,connect,accept your-command-here
但是,似乎有 none 个 open 调用是我期待的(这将在日志显示 "Can't open file..." 之前发生)
可执行文件确实将 open 调用委托给了一个 tierce 库。
似乎 strace 只跟踪内核上可执行文件的调用,而不是库依赖项的调用。
我尝试使用 ltrace 来跟踪后续库中发生的情况,但它显示的信息与 strace 不同,仅函数调用(不是人类可读的)。
有没有办法同时对可执行文件和库进行 运行 strace?
strace
应该显示所有 open
调用。然而:
- 也许您的应用程序调用子进程来完成工作。对于这种情况,您可以添加一个
-f
选项。
- 另一方面,它可能通过打开到另一个进程的套接字(或类似)连接来完成工作。对于那种情况,您将看不到任何痕迹。同样,如果您使用 syslog 接口,那么实际工作可能在您的进程之外完成,可能在您无法使用此工具跟踪的内核中完成。
我有一个没有源代码的程序。
当我 运行 它时,我在日志中有一个 "Can't open file..." 错误。
我调用了 strace 来跟踪内核上的 open 调用,这样:
strace -e trace=open,close,read,write,connect,accept your-command-here
但是,似乎有 none 个 open 调用是我期待的(这将在日志显示 "Can't open file..." 之前发生)
可执行文件确实将 open 调用委托给了一个 tierce 库。 似乎 strace 只跟踪内核上可执行文件的调用,而不是库依赖项的调用。
我尝试使用 ltrace 来跟踪后续库中发生的情况,但它显示的信息与 strace 不同,仅函数调用(不是人类可读的)。
有没有办法同时对可执行文件和库进行 运行 strace?
strace
应该显示所有 open
调用。然而:
- 也许您的应用程序调用子进程来完成工作。对于这种情况,您可以添加一个
-f
选项。 - 另一方面,它可能通过打开到另一个进程的套接字(或类似)连接来完成工作。对于那种情况,您将看不到任何痕迹。同样,如果您使用 syslog 接口,那么实际工作可能在您的进程之外完成,可能在您无法使用此工具跟踪的内核中完成。