4

我正在使用 Qt Creator 的远程部署功能在嵌入式 Linux 目标板上启动我的简单命令行应用程序。我的测试应用程序非常简单,并要求用户打印他/她的名字。它交叉编译、传输到开发板并启动,Qt Creator 底部附近的“应用程序输出”窗口显示“输入您的姓名:”提示,但我无法在任何地方输入并为通过 Qt Creator 远程运行的应用程序提供标准输入。

我怎样才能在 Qt Creator 中做到这一点?我可以以某种方式操纵部署“参数”来连接设备以向我的命令行应用程序提供标准输入吗?我也无法通过选中“项目”>“运行配置”下的“在终端中运行”复选框来远程启动应用程序,因为它不适用于远程部署。

代码:

#include <iostream>

using namespace std;

int main() {
    cout << "Enter a number: ";
    int nb;
    cin>>nb;
    cout << "Here is your number:" << nb << endl;
    return 0;
}

Qt Creator 中的应用程序输出:

Killing remote process(es)...
Starting remote process ...
Remote process started.
Enter a number: d
4

2 回答 2

5

我发现没有办法为 qt creator 从 IDE 中启动的应用程序提供标准输入。

我确实尝试了一些东西,看起来命名管道工作得很好。幸运的是,它包含在 Busybox 中,所以它在我的板上。

要使用它,您可以使用“运行设置”下的“设备上的备用可执行文件”选项从 Qt Creator 远程启动应用程序,并将命名管道的最后一行通过管道传输到需要标准输入的 c++ 程序。因此,您在设备上的“备用可执行文件”如下所示:

cd /home/test; tail -f mypipe | ./test3 –qws

'test3' 是我的程序,/home/test 是可执行文件的位置。

然后打开 1 个额外的 ubuntu 终端并通过 SSH 连接到开发板。现在创建一个名为“mypipe”的命名管道:

mkfifo mypipe

当您的程序期望 stdin 启动并等待输入时,您可以将来自该其他终端的输入回显到命名管道中,您的程序会将其作为 stdin:

echo ‘2’ > mypipe
于 2012-08-09T15:50:18.867 回答
1

Debug > Start Debug子菜单中有更多选项。您需要一个:Attach to Running Debug Server。它确实打开了这个整洁的小窗口:

附加到正在运行的服务器对话框

如您所见,有很多参数,甚至是“在终端中运行”选项,但由于某种原因它在我的机器上不起作用。不要忘记正确设置可执行二进制文件和套件设备设置的本地路径。我还建议您在环境>键盘设置中为AttachToRemoteServer命令绑定热键。

之后,您唯一需要做的就是gdbserver在远程设备上运行:

gdbserver :<port> <executable>

运行过程确实有一个适当的stdinstdout流,您可以通过 SSH 会话与终端中的应用程序进行交互。

于 2016-06-14T17:21:36.313 回答