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