我正在为类似于GDB的调试器编写Eclipse插件。该调试器用C编写,并使用TCL库处理命令。调试器前端创建并添加使用TCL Shell处理的TCL扩展。我试图从我的Java代码运行调试器可执行文件,并读入和读入标准以与应用程序通信。但是我的java进程在两个管道上都没有得到任何东西。如果将可执行文件更改为gdb,我的逻辑就可以正常工作。
我以前从未使用过Tcl,并且不确定Tcl shell是否与进出阻塞过程有关?请提供您的输入或与此有关的任何可能的指针。
此区域中最可能的问题与不将输出刷新到其他进程有关,这可能是两个问题。在Java方面,编写完完整的消息(通常是整行)后,必须在编写器上调用flush()
方法。在Tcl端,您可以在写完一行后使用flush stdout
,或将标准输出通道配置为在写完每一行后自动刷新:fconfigure stdout -buffering line
使用二进制协议,您将完全禁用缓冲(none
而不是line
),并且只确保在每次写入之前完全组装消息。