Unix管道的有效调试技术?
Posted
技术标签:
【中文标题】Unix管道的有效调试技术?【英文标题】:Effective debugging techniques for unix pipes? 【发布时间】:2013-05-31 06:01:51 【问题描述】:我对 unix 编程很陌生,所以请多多包涵。 :)
我想在两个进程之间传递数据。我打算使用命名管道,但阅读了这些“半双工”管道,这很有趣,所以我想我会先尝试一下。
到目前为止,我对这些管道有两个问题:
-
我还没弄清楚如何让 execlp 从我的子进程运行另一个应用程序
即使可以,调试也很困难,因为我只能在父进程中设置断点
我确信这些问题是有原因的。我开始怀疑忘记它们并使用命名管道是否有意义,这样我就可以在单独的 eclipse 实例中调试每个应用程序。
如果有任何相关信息,请告诉我。我使用的代码本质上是在tldp.org 上找到的。
编辑——我将我的问题重命名为关于一般的 unix 管道。我曾假设对于命名管道,我不必使用 fork(),但到目前为止我看到的所有示例都需要它。因此,无论是半双工还是命名管道,我都需要能够以某种方式调试子进程!
EDIT #2 -- this example 清楚地表明,我之前(在 IBM 链接上)看到的有关命名管道的内容不一定是正确的。
【问题讨论】:
【参考方案1】:我推荐两个工具:
strace -ff
应该为您提供所有重要事件的跟踪,让您可以详细检查正在发生的事情,即所有读取和写入;
lsof
允许您转储所涉及进程的文件描述符,清楚地显示与其他内容相关的内容,特别是如果您忘记了close()
某些描述符并且整个事情死锁。
【讨论】:
谢谢,我会在我的代码运行后研究这些工具!以上是关于Unix管道的有效调试技术?的主要内容,如果未能解决你的问题,请参考以下文章
如何在程序崩溃后释放 managed_shared_memory:在调试期间使用哪些有效技术?