7

有没有人尝试创建进程间通信的日志文件?有人可以就实现这一目标的最佳方法给我一些建议吗?

4

3 回答 3

2

这个问题不是很清楚,评论使它不太清楚,但无论如何......

首先要尝试的两件事是ipcsstrace -e trace=ipc

于 2011-03-17T21:26:34.277 回答
1

与内核驱动程序的通信可以采用多种形式。通常有一个特殊的设备文件用于通信,或者可以有一个特殊的套接字类型,如 NETLINK。如果幸运的话,有一个字符设备,其中 read() 和 write() 是唯一的交互方式 - 如果是这种情况,那么这些调用很容易被各种方法拦截。如果你运气不好,很多事情都是用 ioctl 或者更难的东西来完成的。

然而,在使用内核驱动程序进行通信的程序上运行“strace”可以揭示它所做的一切——尽管如果程序恰好有用于通信的库,“ltrace”可能更具可读性。通过将参数调整为“strace”,您可能会得到一个只包含您需要的信息的转储:

  • 首先,只关注调用并尝试找出内核通信的方式
  • 然后,将过滤器添加到 strace 调用以仅记录内核通信调用
  • 最后,确保 strace 记录所有调用的完整字符串,这样您就不必处理截断的数据

指向 IPC 调试的答案可能不相关,因为与内核的通信几乎与 IPC 无关(至少与不同的 UNIX IPC 设施无关)。

于 2011-03-19T22:34:00.970 回答
1

如果您想记录所有 IPC(似乎非常密集),您应该考虑插装。

他们有很多很好的工具,特别是查看PIN,手册的这一部分

在这个例子中,我们展示了如何通过检查指令来进行更有选择性的检测。该工具生成程序引用的所有内存地址的跟踪。这对于调试和模拟处理器中的数据缓存也很有用。

如果您正在做一些重量级的调整和分析,请查看TAU(调整和分析实用程序)。

于 2011-03-18T21:38:48.663 回答