我有一个更大的C ++应用程序,完全由控制台/终端控制。打印了很多调试输出,但是它开始变得混乱。各种模块的一般状态信息之间丢失重要信息。禁用这些输出是不可能的,因为它们实际上是故障的重要指标。
相反,我认为“分割”屏幕可能更有帮助,即在屏幕(终端)上的一种额外区域中具有特定输出。这可以被认为是状态栏(可能是多行)。
我可以使用ANSI代码轻松完成此操作,但是仍有许多printfs总是弄乱输出。滚动也是这样打破的。
一个选项可能是使用ncurses,但我不想将整个应用程序移植到它。我试图找出是否可以在ncurses应用程序中显示正常的printf输出(有点像终端控制台中的终端:-)),但没有找到任何。
我正在寻找任何可以让我轻松添加这样的内容的建议:
代码将在笔记本电脑上的Linux机器上运行(通常使用gnome终端)或通过ssh连接远程运行。
答案 0 :(得分:0)
如果不将应用程序转换为使用ncurses,则使用ncurses执行此操作是不切实际的。 ncurses期望是唯一操纵屏幕的东西。
在我的头脑中,我有2个想法(除了将你的应用转换为ncurses):
您可以使用一些疯狂的链接器或#define技巧来替换对使用ncurses写入屏幕的版本的printf等所有调用。我不推荐这个。
您可以将输出通过管道输入到stdin上的输入,然后使用ncurses根据某种正则表达式显示输入。 (例如,以“错误”开头的行会进入屏幕的上半部分到底部)。
如果您想使用终端的滚动缓冲区,您需要在窗口顶部放置滚动部分。 ncurses可能无法很好地满足此要求,因为它是在终端没有回滚缓冲区的时代设计的。