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管道的有效调试技术?的主要内容,如果未能解决你的问题,请参考以下文章

如何更有效的调试运行MATLAB程序

如何在程序崩溃后释放 managed_shared_memory:在调试期间使用哪些有效技术?

Linux on Power 上的调试工具和技术

[c]调试程序中Lvalue required这句话是啥意思?

NFC驱动调试

Unix环境高级编程 调试程序