4

QtCreatorのRemoteDeploy機能を使用して、組み込みLinuxターゲットボードで単純なコマンドラインアプリケーションを起動しています。私のテストアプリケーションは非常にシンプルで、ユーザーに名前を印刷するように求めます。クロスコンパイルしてボードに転送して起動し、QtCreatorの下部にある[ApplicationOutput]ウィンドウに[Typeyour name:]プロンプトが表示されますが、どこにも入力できず、QtCreatorを介してリモートで実行されているアプリケーションにstdinを提供できません。

Qt Creator内でこれをどのように達成できますか?どういうわけか、デプロイの「引数」を操作してデバイスを接続し、コマンドラインアプリにstdinを提供できますか?また、リモート展開では使用できないため、[プロジェクト]>[構成の実行]の[ターミナルで実行]チェックボックスをオンにしてアプリケーションをリモートで起動することもできません。

コード:

#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クリエーターがIDE内から起動したアプリにstdinを提供する方法がないことがわかりました。

いくつか試してみましたが、名前付きパイプは問題なく機能しているようです。幸い、Busyboxに含まれているので、私のボードにあります。

これを使用するには、「実行設定」の下の「デバイス上の代替実行可能ファイル」オプションを使用してQt Creatorからリモートでアプリを起動し、名前付きパイプの最後の行をstdinを期待するc++プログラムにパイプします。したがって、デバイス上の代替実行可能ファイルは次のようになります。

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

'test3'は私のプログラムであり、/ home/testは実行可能ファイルの場所です。

次に、追加のubuntuターミナルを1つ開き、ボードにSSHで接続します。次に、「mypipe」という名前付きパイプを作成します。

mkfifo mypipe

また、stdinを期待するプログラムが起動して入力を待機すると、他の端末からの入力を名前付きパイプにエコーでき、プログラムはそれをstdinとして受け取ります。

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

[デバッグ] > [デバッグの開始]サブメニューには、さらに多くのオプションがあります。そして、必要なものが1つあります。実行中のデバッグサーバーに接続します。それはこのきちんとした小さなウィンドウを開きます:

実行中のサーバーダイアログにアタッチ

ご覧のとおり、「ターミナルで実行」オプションも含めて多くのパラメーターがありますが、何らかの理由で私のマシンでは機能しません。ローカルパスを実行可能なバイナリおよびキットデバイス設定に適切に設定することを忘れないでください。また、[環境] >[キーボードAttachToRemoteServer設定]のコマンドにホットキーをバインドすることをお勧めします。

その後、あなたがする必要がある唯一のことはgdbserverあなたのリモートデバイスで実行することです:

gdbserver :<port> <executable>

実行中のプロセスには適切なstdinストリームがstdoutあり、SSHセッションを介してターミナルでアプリケーションと対話できます。

于 2016-06-14T17:21:36.313 に答える