使用 tcl 外壳运行的进程的标准输入和输出



我正在为类似于GDB的调试器编写一个Eclipse插件。此调试器是用 C 编写的,并使用 TCL 库来处理命令。调试器前端创建并添加使用 TCL 外壳处理的 TCL 扩展。我正在尝试从我的 java 代码运行调试器可执行文件,并读取标准以与应用程序通信。但是我的 java 进程在两个管道上都没有得到任何东西。如果我将可执行文件更改为 gdb,我的逻辑就可以正常工作。

我以前从未使用过Tcl,不确定Tcl外壳是否与阻塞过程进出有关?请提供您的意见或任何可能的指示。

此区域中最可能的问题与不将输出刷新到其他进程有关,这可能是双向问题。在 Java 端,必须在编写完整消息(通常是整行(后在编写器上调用flush()方法。在 Tcl 端,您可以在写入一行后使用flush stdout,或者将标准输出通道配置为在写入每行后自动刷新:

fconfigure stdout -buffering line

使用二进制协议,您可以完全禁用缓冲(none而不是line(,并确保消息在每次写入之前完全组装。

最新更新