从C/ c++编码的应用程序中读取输出流

Reading the output streams from a C/C++ coded application

本文关键字:应用程序 读取 输出流 编码 c++      更新时间:2023-10-16

首先,我用的是Ubuntu 14.04

所以,这是我的问题:我正在处理一个带有图形界面(游戏/音乐播放器等)的c++代码应用程序。每当有事情发生时,这个应用程序就会不断地向日志记录器发送字符串,但是这些字符串只在客户端内部可见。

我已经尝试过做什么(失败):

  • 跟踪应用程序并过滤结果(假设如果应用程序显示消息"Hello, user",我将把所有输出记录到测试文件中并搜索"Hello")

  • 跟踪应用程序

  • 使用dbg

  • 调试应用程序
  • 查找C/c++应用程序的调试方法

我从最后一种方法中得到的是程序通常通过clog流记录错误和消息。我可以做些什么来检索这些信息?

继续,我有一个图形C/c++编码的应用程序,在客户端内部的窗口上恒定输入字符串;我想读取这些字符串或任何其他字符串/输入这个应用程序做。任何调试/内存读取信息也可能有所帮助!

谢谢

  1. std::cout对应 stdout 流;
    std::cerrstd::clog对应 stderr 流。

  2. 终端默认显示发送到 stdout stderr 的内容。
    要查看它,只需打开终端模拟器(或者,或者,终端),键入程序所在的路径,并使用Enter确认。您将看到发送到stdoutstderr的内容。

  3. stdout 1表示, stderr 2表示。

  4. Next提示设计用于bash shell。(它们可能在另一个shell上工作,但不是必须的)。如果你不确定你使用的是bash,在终端中输入bash,并使用Enter确认。

  5. 当你想发送流的内容到文件,在路径之后(但在按Enter键之前)写空间和n>filename,其中n是你想要重定向的流的数量(当跳过时,1 = stdout 将被重定向)。

  6. 当你想完全忽略流的内容,重定向流到/dev/null

  7. 当你想发送 stdout 到另一个程序(如果第二个程序是控制台程序,它将看到它像用户使用键盘输入),在path之后(但在按Enter之前)键入|program_name and_possible_parameters。例如,您可以将 stdout 重定向到grepgrep将只写包含字符串作为参数传递的行(在grep之后,键入空格和字符串,如果包含空格,使用""''分隔参数,如果包含', "在其前面使用反斜杠())。如果它的结果将出现在终端中,我建议在grep和argument之间写--color=auto,告诉grep用不同的颜色来写每次出现的argument。最后,您的命令看起来像
    path_to_your_program |grep --color=auto "argument" .

  8. 一个命令中可以使用多个重定向。
    重定向从左向右处理

  9. 当你想重定向 stderr 到另一个程序的输入,你可以重定向它的内容到 stdout 输入2>&1,然后使用|