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

标签 linux unix execution trace strace

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

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

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

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

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

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

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

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

最佳答案

strace 应该显示所有 open 调用。然而:

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

关于linux - strace 'open' 在可执行文件的库中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616213/

相关文章:

linux - Linux内核建立映射虚拟物理地址的src代码点在哪里?

c - 试图理解函数指针的用法

bash - bash 脚本中意外标记 `do' 附近出现语法错误

c - 如何限制C语言的执行时间

linux - `echo` (shell bash) 发送整数值,而不仅仅是字符和字符串。是否可以?

linux - 如何将文件读入变量并使用该变量在 shell 中以精确格式打印它

python打印只在本地显示

c - 传输端已连接错误: 106 with connect()

haskell - 如何在 Haskell 中获取程序的运行时间

sql-server - 为什么只有索引扫描,RID 在哪里?