Armadilloフォーラム

GDB server を使用してのデバッグ

atom

2015年2月20日 10時15分

お世話になります。
佐藤です。

Armadillo-460のデバッグをgdbserverを使用して行おうとしています。
"Howto : GDB Serverを使う(Armadillo)"や過去のメーリングリストのgdbserverについての内容を参考
にしながら行っているのですが,手順など基本的な部分で躓いているのでご教授よろしくお願いします。

"Howto : GDB Serverを使う(Armadillo)"の3、転送にて「ftpでファイルを送受信する」または「ユーザランドをカスタマイズする」
と記述されています。

① 「ftpでファイルを送受信する」場合以下の手順であっているのでしょうか?
「hello」を表示させるプログラムの実行ファイルを取得するの同様の手順
a. gdbserver をATDEのweb公開用ディレクトリにコピーする
b.ArmadilloからATDEのweb公開用ディレクトリにあるgdbserverを取得(wgetコマンド)する

② ①の方法であっている場合、Armadillo上でのGDBserver起動を試みましたが以下のようなエラーとなりました。
実行前に何かすることがあるのでしょうか?
hello wold と同様にgdbserverに実行権限の付加(chmode +x)は行いましたが変わりませんでした。
エラー;-ash: gdbserver: not found

③ Howtoにはgdbserver を /usr/binの下に入れておくと便利ですと書かれていますが、ftpファイルで送受信した場合
/usr/bin下にファイルを移す場合どのようにするのでしょうか?
その際の注意点などもあればご教授ください。

質問内容は基本的なことばかりかと思いますがよろしくお願いします。

コメント

at_takashi.sasayama

2015年2月20日 12時39分

笹山です。

> Armadillo-460のデバッグをgdbserverを使用して行おうとしています。
> "Howto : GDB Serverを使う(Armadillo)"や過去のメーリングリストのgdbserverについての内容を参考
> にしながら行っているのですが,手順など基本的な部分で躓いているのでご教授よろしくお願いします。

Armadillo-400シリーズでの gdbserver の使用方法ですが以下の手順となります。

■1. ユーザーランドにgdbserverを含めるコンフィグレーション

デフォルトの設定では ユーザーランドに gdbserver は含まれていません。
ユーザーランドのコンフィギュレーションを行い gdbserver を含めます。

Userland Configuration
    Miscellaneous Applications  --->
        [*] gdbserver #チェックを入れる

コンフィギュレーション行いましたら、ユーザーランドをビルドし、作成されたイメージで
Armadilloを起動してください。

■2. サンプルアプリの作成

ATDE3上で 以下の sample.c を作成します。

 #include <stdio.h>
 int main(int argc, char *argv[])
 {
        printf("Hello, World!\n");
        return 0;
 }

sample.c をビルドします。

atde3 $ arm-linux-gnueabi-gcc sample.c -o sample -g

生成された sample を FTP などで Armadillo に転送します。

■3. Armadillo-460上で gdbserver を実行

ここでは
・Armadillo-460 の IPアドレス "192.168.1.100"
・開発用PC(ATDE3)のIPアドレス "192.168.1.200"
・デバッグ時のポート番号 "9876"
として説明します。

Armadillo-460上 で gdbserver を実行します。

armadillo# gdbserver 192.168.1.100:9876 ./sample
Process ./sample created; pid = 1265
Listening on port 9876

■4. ATDE3 から gdbserver へ接続

ATDE3 で以下のコマンドを実行し Armadillo の gdbserver へ接続します。

atde3 $ arm-linux-gnueabi-gdb sample
< 中略 >
 
(gdb) target remote 192.168.1.100:9876
Remote debugging using 192.168.1.100:9876
[New Thread 1273]
0x400007c0 in ?? () from /usr/arm-linux-gnueabi/lib/ld-linux.so.3

gdbserver へ接続が成功すると、Armadillo上で以下のメッセージが確認できます。

Remote debugging from host 192.168.1.200

ATDE3上からgdbを操作します。

(gdb) b main
Breakpoint 1 at 0x8468: file sample.c, line 2.
 
(gdb) c
Continuing.
 
Breakpoint 1, main () at sample.c:2
2               printf("Hello, World!\n");
 
(gdb) c
Continuing.
 
Program exited normally.

上記、操作を完了後、Armadillo-460では、
Hello, World! が表示され、gdbserver は終了します。

回答ありがとうございます。

menuconfig でユーザーランドに"gdbserver”の追加を行うことで、ATDEからArmadillo上のgdbserverへのアクセス
出来ることを確認しました。

4の内容で上手く操作が出来ていない点があるので回答をお願いします。

① 初めて操作したときは問題なく操作できたと思うのですが,2回目以降の操作時に
(gdb) b main
と打ち込んだとき"No symbol table is loaded. Use the "file" command." と表示されるようになりました。
上記メッセージを無視して、
(gdb) c
と打ち込んだら、Breakpoint ~ の表示はなく Program exited normally. が表示され、Armadilloのコンソール側は
Hello World!
Child exited with retcode = 0
Child exited with status 0
GDBserver exiting
と表示し,GDBserverが終了しました。
GDBserver が終了したあとにATDE側でも操作が必要になるのでしょうか?

② 実際のデバッグでは特定の箇所にブレイクポイントをはるなどの操作が必要になるかと思います。
そのような場合操作はどのようにすればいいのでしょうか?
参考になりそうな資料があれば教えていただけないでしょうか。

以上,回答よろしくお願いします。

at_takashi.sasayama

2015年2月27日 13時04分

笹山です。

> ① 初めて操作したときは問題なく操作できたと思うのですが,2回目以降の操作時に
> (gdb) b main
> と打ち込んだとき"No symbol table is loaded. Use the "file" command." と表示されるようになりました。

デバッグ対象のプログラムである sample のシンボル情報が読み込まれていないようです。
メッセージに表示されている file コマンドで sample を読み込んでみてください。

(gdb) file sample

GDBの操作は下記のサイトが参考になると思います。

GDBマニュアル
http://flex.phys.tohoku.ac.jp/texi/gdb-j/gdb-j_toc.html

> ② 実際のデバッグでは特定の箇所にブレイクポイントをはるなどの操作が必要になるかと思います。
> そのような場合操作はどのようにすればいいのでしょうか?
> 参考になりそうな資料があれば教えていただけないでしょうか。

Eclipse などを使用してデバッグするのが一つの方法かと思います。
以下の投稿が参考になると思います。

Armadilo-460とEclipseのリモートデバッグの方法
https://armadillo.atmark-techno.com/forum/armadillo/912

atom 佐藤です。
回答ありがとうございました。

① に関して、fileコマンドを実行してみても現象は変わりませんでした。
再度いろいろ試したところ、ATDE上からArmadilloのgdbserverにアクセスするときに

atde3 $ arm-linux-gnueabi-gdb sample

のコマンド入力を"sample"の実行ファイルが存在するフォルダをカレントディレクトリに
することにより、動作するようになりました。

② eclipse使用にあたり以下の導入手順を参考に進めています。
参考 URL:https://armadillo.atmark-techno.com/forum/armadillo/912

導入手順
ATDE3 側
1.nfs サーバーをインストール
端末で以下のコマンドを実効
$: sudo apt-get install nfs-kernel-server

2.NFS共有ディレクトリの登録
"/etc/exports"に以下を追記
/home/atmark 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
<= 192.168.139.101 (ATDE3側で設定するIPアドレスと合わせた)

3.i384 Linux用 ARMクロスデバッガをダウンロードしインストール
 ダウンロード元URL:http://armadillo.atmark-techno.com/howto/gdbserver-a
インストール先:/usr/bin
<= ダウンロードしたファイルを"/usr/bin"にコピー
$: sudo cp -a arm-linux-gdb /usr/bin

4."/mnt/pc"に"/home/atmark"のシンボリックリンクを作成
$: sudo ln -s /home/atmark/ /mnt/pc/

5.Eclipse4.2(JUNO)をインストール
eclipse のダウンロード
URL:http://www.eclipse.org/downloads/packages/release/juno/SR2
Eclipse IDE for C/C++ Devolopers をダウンロードして使用

ダウンロードした.tarファイルを"/usr/local"下に解凍する
$: cd /usr/local/
$: sudo tar -xvzof /~/eclipse-cpp-juno-SR2-linux-gtk.tar.gz
※ /~/ でダウンロードしたファイルの場所を指定する

上記のようにファイルを解凍した場合、eclipseの実行は以下のようにコマンドを打つ
$: /usr/local/eclipse/eclipse

アプリケーション起動時、ワークスペースを以下のようにする
workspace : /home/atmark/workspace

6.Pleiades - Eclipse プラグイン日本語化プラグイン (1.4.0)をインストール
Pleiades のホームページ(http://mergedoc.sourceforge.jp/)より、プラグインをダウンロードする

Pleiades プラグイン・ダウンロード にある「安定版」のページがらダウンロードのページに飛べる
最新版の"pleiades_1.5.0.zip"を使用する

プラグインをダウンロードしたら、カレントディレクトリを5でeclipceを解凍したフォルダに移動して
.zipの解凍を行う。

$: cd /usr/local/eclipse
$: sudo unzip /~/pleiades_x.x.x.zip

pleadesのファイル解凍後
eclipse.ini の最後に一文追加

# sudo gedit /usr/local/eclipse/eclipse.ini

追加する一文 (フルパスで記載する)
-javaagent:/usr/local/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

確認1
2で指定するアドレスはATDE3上のアドレスでいいのでしょうか?

確認2
6にて日本語化のプラグインを読むように一文を追加したらeclipceの起動が出来なくなっていしまいました。
どこか間違っているところがあるのでしょうか?
エラーにより表示された画面は添付ファイルを参照

確認3
7番目以降についてどのように設定を行っていくのかいまひとつわかりませんでした。
もう少し詳細について振れている資料などはないでしょうか?

以上解凍をお願いします。

ファイル ファイルの説明
エラー時画面.zip eclipce 起動実行時のエラー画面

『Armadilo-460とEclipseのリモートデバッグの方法』 を投稿した森本です。

> 確認1
> 2で指定するアドレスはATDE3上のアドレスでいいのでしょうか?
ATDE3上のアドレスで構いませんが、ATDE3とArmadilloのサブネットマスクは合わせてください。

> 確認2
> 6にて日本語化のプラグインを読むように一文を追加したらeclipceの起動が出来なくなっていしまいました。
> どこか間違っているところがあるのでしょうか?
投稿している内容の通り、日本語化プラグイン は 1.4.0 をインストールしてください。
1.5.0ではエラーになります。
このエラーが発生した場合、Eclipseをインストールしているディレクトリごと削除してEclipseの再インストールから行ってください。

> 確認3
> 7番目以降についてどのように設定を行っていくのかいまひとつわかりませんでした。
> もう少し詳細について振れている資料などはないでしょうか?
以下を参考にしてください。
(1) 「ヘルプ」-「最新ソフトウェアのインストール」 を選択します。
(2) 作業対象を 「JUNO- http://download.eclipse.org/release/juno」選択し、しばらく待ちます。
(3) しばらくすると 名前リストが更新されるので 以下を選択します。
プログラミング言語
├ C/C++ 開発ツール
└ C/C++ 開発ツール SDK
モバイルおよびデバイス開発
├ C/C++ GCC Cross Compiler Support
└ C/C++ GDB Hardware Debugging
(4) インストールするリストが表示されるので「次へ」のボタンを押下します。
(5) ライセンス確認画面が開くので、同意にチェックし「完了」ボタンを押下します。
(6) インストール中に証明書の確認画面が表示されます。
「すべて選択」ボタンを押下し、「OK」ボタンを押下します。
(7) Eclipseの再起動をします。

なお、上記の(3)で挙動がおかしい場合、JavaJDKがインストールされていない可能性があります。
この場合は、Eclipseを一度削除し、JavaJDKをインストールしてからEclipseを再インストールしてください。
インストールするJavaJDKは以下になります。
 名称:Java JDK 6 (JDK7はATDE3にはインストールできません。必ずJDK6をインストールしてください。)
 モジュール名:openjdk-6-jdk
 バージョン:1.5.0_22

回答ありがとうございます。
プラグインを"1.5.0" -> "1.4.0" に変更して試したのですが状況が変わりませんでした。
eclipseのフォルダを削除~再インストールについて以下の手順をとったのですがどこが間違っているのでしょうか?
eclipseのファイル解凍先:/usr/local

(1) eclipse のフォルダ削除
$: sudo rm -r /usr/local/eclipse

(2) Eclipse IDE for C/C++ Devolopers の解凍 (カレントディレクトリ "/usr/local"で実行)
$ sudo tar -xvzof /~/eclipse-cpp-juno-SR2-linux-gtk.tar.gz
※ /~/ でダウンロードしたファイルの場所を指定する

(3) (2)で解凍したeclipseのフォルダへ移動
$ cd /user/local/eclipse

(4) Pleiades プラグイン の解凍
$ sudo unzip /~/pleiades_1.4.0.zip
※ /~/ でダウンロードしたファイルの場所を指定する

(5) eclipse.ini に一文追加
追加した一文 : -javaagent:/usr/local/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

(1)~(5)の手順に沿って再度日本語化パッチの適応まで試してみましたが状況は変わりませんでした。
手順として抜け落ちている点はないでしょうか?

以上回答をお願いします。

森本です。

エラー画面のキャプチャの内容を見落としていました。
JavaJDKがインストールされていない様です。
以下のコマンドでJavaJDK6をインストールしてみてください。

$ sudo apt-get -yV install openjdk-6-jdk

回答ありがとうございました。
JavaJDK6 をインストールしたら、
7.eclipse上で新規ソフトウェアのインストールの実行まで無事終わりました。

ATDE上の手順
8.
(1) プロジェクトのデバッグ構成にてC/C++リモートアプリケーションに新規で追加し以下を設定。
上記に記載されていた設定はプロジェクトを新規に作成後、設定を行うということでしょうか?
新規作成 -> Cプロジェクト作成 だと"使用ランチャー"の設定などが見当たらなかったのですがソースの追加などが終わってから
出来るようになるのでしょうか?
今回は、添付ファイルにあるようなソースとmakefileを使用して簡易てきな確認をと思っていますが、SDKに読み
込むことは可能なのでしょうか?

(2) Armadilloカーネル構築にて以下を有効にして再構築する
"make menuconfig" -> "user vendor setting"から設定の変更を行おうとしたのですが、
Miscellaneous Application -> [*]gdbserver にチェックを付ける
Network Applications -> [*]sftp にチェックを付ける
と2つは見つかったのですが、 NFS file system support、Provide NFSv3 client support、SSHサーバー
が見当たりませんでした。残りの3つは上記方法で設定できないのでしょうか。それとも見落としただけでしょうか?

以下を参考にatmarkユーザの追加について
参考:http://armadillo.atmark-techno.com/howto/add-user
ユーザーランドの設定を変えてArmadilloのログインユーザーの追加ということでしょうか?

Armadillo 側の実行手順について
「rootでログインし、Armadillo起動時に一回だけ実行する」と記載されていますが、
デバッグに使用するアプリケーションを実行するということでしょうか?
(アプリ実行後に、 /etc/・・・ ~ mount -t ・・・ を入力する)

SDKの基本操作的なことの質問も含まれてしまっていますが、可能な範囲内で回答をお願いします。

ファイル ファイルの説明
hello.zip

森本です。

> (1) プロジェクトのデバッグ構成にてC/C++リモートアプリケーションに新規で追加し以下を設定。
> 上記に記載されていた設定はプロジェクトを新規に作成後、設定を行うということでしょうか?
> 新規作成 -> Cプロジェクト作成 だと"使用ランチャー"の設定などが見当たらなかったのですがソースの追加などが終わってから
> 出来るようになるのでしょうか?
おそらく、Eclipseのインストールに失敗しています。Eclipseを再度削除して再インストールをしてください。
この現象は下方も経験していますが、具体的に何が悪かったのかは分からず再インストールを繰り返しました。

> 今回は、添付ファイルにあるようなソースとmakefileを使用して簡易てきな確認をと思っていますが、SDKに読み
> 込むことは可能なのでしょうか?
ソースは取り込むことが出来ますがmakefileは無理と思います。
(Eclipseを使い倒してるわけではないので下方が知らないだけかもしれませんが。。。)

> と2つは見つかったのですが、 NFS file system support、Provide NFSv3 client support、SSHサーバー
> が見当たりませんでした。残りの3つは上記方法で設定できないのでしょうか。それとも見落としただけでしょうか?
上記3つは「Customize Kernel Settings」にあります。

> ユーザーランドの設定を変えてArmadilloのログインユーザーの追加ということでしょうか?
その通りです。

> Armadillo 側の実行手順について
> 「rootでログインし、Armadillo起動時に一回だけ実行する」と記載されていますが、
> デバッグに使用するアプリケーションを実行するということでしょうか?
> (アプリ実行後に、 /etc/・・・ ~ mount -t ・・・ を入力する)
手順にも書いている通り、「ATDE3でビルドしたモジュールを直接参照できるようにするため/mnt/pcに:/home/atmarkをマウントし、gdbserver、SSHの受信ができる様にフィルタリングを解除してSSHDを起動する」ためです。