gdb デバッグのためにコマンド ラインで Ubuntu Touch アプリケーションを実行しますか?

gdb デバッグのためにコマンド ラインで Ubuntu Touch アプリケーションを実行しますか?

これに関連する回答はすでにいくつか見たことがありますが、明確な答えが得られなかったので、もう一度試してみます。

基本的に、私の質問は、Ubuntu Touch アプリケーションをコマンドラインから実行するにはどうすればよいか、具体的には、 でデバッグできるようにするにはどうすればよいかということですgdb


詳細:

adb shellまず、それは、PC上の(電話/タブレット)デバイスへのリモートシェル接続から、またはphablet-shell(参照)から実行したいということです。Ubuntu Touch のハッキング、パート 5: adb shell と phablet-shell)。私はすでにターミナルアプリしかし、適切な(VNC)を確立できないことを考えると、Ubuntu Touch システムへのリモート デスクトップ接続、 - 実際に操作できないので、私にとってはあまり役に立ちません (ただし、デバイスに接続された Bluetooth キーボードはまだ試していません)。

第二に、可能であればアプリケーションをフォアグラウンドで実行し、ターミナルのコマンドラインから呼び出されたときに、アプリケーションが標準出力をターミナルにダンプすることを期待します。したがって、Ubuntu Touch: ターミナルから Ubuntu Touch アプリを実行するにはどうすればよいですか?あまり使えません。(これは BQ E5 (Ubuntu 15.04、OTA-10.1) からのものです)

phablet@ubuntu-phablet:~$ ubuntu-app-list
ubuntu-system-settings
com.ubuntu.calculator_calculator_2.0.233
phablet@ubuntu-phablet:~$ ubuntu-app-launch com.ubuntu.calculator_calculator_2.0.233
phablet@ubuntu-phablet:~$ 

...単にアプリをバックグラウンドで起動し、すぐに終了します。そして、AFAICS、webapp-containerブラウザで URL を開くだけで、任意のアプリケーションは実行されません。

プリインストールされているアプリケーションの中には、プログラムによって実行されるものもあるqmlsceneようです。ターミナルからUbuntuタッチアプリを簡単に実行するにはどうすればよいですか?注記: しかし、そこで受け入れられた回答でさえ、Ubuntu 15.04 Touch にはそのままでは適用できません。

$ /usr/bin/qmlscene \
> --desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
> /usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml
Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
file:///usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml:22 module "Alarm" is not installed
file:///usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml:20 module "WorldClock" is not installed

... アプリケーションは起動後すぐにデバイス上でシャットダウンします。以下は、BQ E5 Ubuntu 15.04 で動作することがわかった唯一のコマンド ラインです。

APP_ID=com.ubuntu.clock_clock_3.7.456 \
QML2_IMPORT_PATH=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf \
QML_IMPORT_TRACE=1 \
/usr/bin/qmlscene \
--desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml

次に、アプリケーションが電話で起動し、シェル ターミナルに次のようなメッセージがダンプされます。

Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
QQmlImportDatabase::addImportPath: "/usr/lib/arm-linux-gnueabihf/qt5/qml"
QQmlImportDatabase::addImportPath: "/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf"
QQmlImportDatabase::addImportPath: "/usr/lib/arm-linux-gnueabihf/qt5/bin"
...

...ターミナルで Ctrl + C を押すと、アプリケーションが終了します。

私がこれを気に入っている理由は、まずアプリケーションのプリントアウトが何であるか、それをリダイレクト/保存する方法を知っているからです。また、デバッグのためにコマンドラインを構築する方法も知っていますgdb。デバイスを書き込み可能モードに設定し、シェルからインストールしましたbuild-essentialUbuntu Phone に通常の (cli) .deb パッケージをインストールする推奨方法は何ですか?) を実行すると が取り込まれるgdbので、読み取り専用モードでもシェルで使用できるようになります。次に、次のように実行します。

APP_ID=com.ubuntu.clock_clock_3.7.456 \
QML2_IMPORT_PATH=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf \
QML_IMPORT_TRACE=1 \
gdb --args \
/usr/bin/qmlscene \
--desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml

... 正しく開きますgdb:

GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
...
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/qmlscene...(no debugging symbols found)...done.

(ただし、この例ではデバッグ シンボルが欠落しているため、あまり役に立ちません)。

ただし、 によって実行されるこれらのアプリの他にqmlscene、Ubuntu Touch 15.03 には、ブラウザー アプリなどの「適切な」実行ファイルもあるようです。

phablet@ubuntu-phablet:~$ which webbrowser-app
/usr/bin/webbrowser-app
phablet@ubuntu-phablet:~$ file /usr/bin/webbrowser-app
/usr/bin/webbrowser-app: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c173774045b98a97e831eda92dd5008d08b9a251, stripped

... しかし、この種類のコマンドは、コマンド ラインから実行することはできません。私が実行した中で最も近いもの (上記と類似し、env報告された電話のターミナル アプリで実行されたいくつかの環境変数をコピー) は次のとおりです。

APP_ID=webbrowser-app \
UNITY_MIR_SOCKET=/run/mir_socket \
MIR_SOCKET=/var/run/mir_socket \
MIR_SERVER_PROMPT_FILE=1 \
MIR_SERVER_NAME=session-0 \
/usr/bin/webbrowser-app \
--desktop_file_hint=/usr/share/applications/webbrowser-app.desktop

...しかし、ターミナルでは次のエラーが表示されてすぐに失敗します。

Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
UbuntuClientIntegration: connection to Mir server failed. Check that a Mir server is
running, and the correct socket is being used and is accessible. The shell may have
rejected the incoming connection, so check its log file
Aborted

さらに、このすべてのビジネスは--desktop_file_hintこれは Unity8 で必須のようです (つまり、アプリ自体が使用していなくても、Unity8 はアプリのコマンド ラインを検査して探す可能性があります) - ただし、なくなる可能性があります (またはなくなります):

ubuntu-bugs - [バグ 1578319] [新規] 一部の ubuntu-ui-toolkit AP テストが起動に失敗する - desktop_file_hint を使用しているため、unity8 によって拒否される (2016-05)

...upstart-app-launch を使用していないため、失敗の原因となります。desktop_file_hint はアプリを起動するサポートされた手段ではありません (いつでもなくなる可能性があります)。そのため、UITK は AP テストで UAL を使用するように変更する必要があります。

これは確かに最近まで機能していましたが、最近のリファクタリングにより desktop_file_hint の動作が壊れてしまいました。これはサポートされていない動作であるため、依存する必要があります。そのため、古い動作を復元するよりも UITK を修正する方がよいでしょう。

わかりました。では、インストールされていないアプリケーションからの実行ファイルをupstart-app-launch(つまり)で実行するにはどうすればいいのでしょうか?また、ターミナルでフォアグラウンドで実行するにはどうすればいいのでしょうか?Androidにもあるように、Ubuntu SDKにも同様のものがあるubuntu-app-launchことは知っています。ndk-gdbQt Creator経由どうやらgdbserverデバイス上で使用されているようです。ただし、私はそのような場合に GUI を起動したくないので、実際には、gdb上記のように、実行可能ファイルをコマンド ラインの引数として指定して、昔ながらの方法で実行したいと思っています。

おそらく、これは主に、デバイスと (従来の) デスクトップに適用される init/Upstart、X11/Mir、Gnome/Unity などの違いを私が十分に理解していないことに関係していると思います。何が何を実行しているのか、私にはよくわかりません。ターミナル コマンド ラインから (GUI) Ubuntu Touch アプリを実行する方法が理解できるよう、十分な説明をいただければ幸いです。

答え1

まあ、私が疑問に思っていたことのいくつかを説明する何かを見つけたと思いますが、誰かが適切な博学な回答を投稿してくれると嬉しいので、今のところこれを受け入れるつもりはありません...

とにかく、リソースは次のとおりです。

バグ #1367871 「ubuntu-app-launch は実行ファイルに引数を渡さない」 : バグ : Ubuntu アプリケーション ランチャー
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871

UAL は、カスタム バイナリを好きなように実行するように設計されているのではなく、アプリケーションを起動するように設計されています。アプリケーションはさまざまなメタデータで定義されますが、重要なものの 1 つがデスクトップ ファイルです。このファイルは、アプリケーションの起動方法を定義し、UAL がアプリケーションの起動方法に使用するファイルです。このようにして、アプリケーションは一貫した方法で起動され、デバイス間で同じものになります。[...]

アプリの制限に関して難しいのは、コマンドライン引数と環境変数は実際にはあまり良い組み合わせではないということです。click パッケージの世界では、「アプリ」はシステムの他の部分とは完全に分離されています。click には、ubuntu-app-launch や apps スコープなど、システムの他の部分がそれらのアプリを簡単に見つけられるように、シンボリックリンクなどを設定するためのフックがいくつかあります。しかし、それらはコマンドライン アプリケーションではないため、任意の構成でコマンドラインから単純に実行することはできません。

答え2

私は Lubuntu を実行していますが、ssh -Y user@linuxbox で開始されたリモート シェルからはこれらが正常に動作することがわかりました。

ubuntu-app-launch "qterminal"    
qterminal

1つ目はQuartzでqterminalを起動し、パスワードを尋ねる必要はありません。2つ目はqterminalを起動しますが、パスワードが必要です。

1 つ目は bash の実行だと思います。 を実行してみましたかlxsession? 使用できないにもかかわらず、奇妙な新しいゴミ箱と Unity Linux インストーラーが奇妙に表示されます。

ここに画像の説明を入力してください

関連情報