なんとかなるさね

マイコンをネタにブログを始めてみました


QEMU | UbuntuのARMユーザランド + ARM Linux GDBでARM Linux Arduinoスケッチをデバッグ (2) 

1つ前のエントリでARM Linux ArduinoスケッチをビルドしたWindows版Linaro ARM Linux Cross GCC 4.7
インストールフォルダにはWindows版Linaro ARM Linux Cross GDBがあります。そこで、今度は、Linux版
GDBではなく、QEMUのLinux ARMユーザランドエミュレーションモードに組み込まれたGDBSERVER機能と、
このWindows版GDBとの組み合わせで、いつものLinux Arduinoスケッチ(sketch_jan10a.cpp.elf /dev/ttyS1
/dev/ttyS2 /dev/ttyS3)をデバッグ出来るか試してみました。この組み合わせでも、残念ながら以下の問題に
遭遇してしまいました。(もともと、これで問題を回避出来るとは思っていませんでしたが。)

* main()関数に設定したブレークポイントでは停止するが、setup()関数やloop()関数では停止しない
* 実行を開始した後、GDBから^Cキーで実行を中断させることが出来ない

(1) 起動は出来るものの、、、



(2) main()関数に設定したブレークポイントでは停止するが、setup()関数やloop()関数では停止しない。
  停止しないので、最後まで実行してしまった後、スケッチが終了する。



(3) GDBから^Cキーで実行を中断させることが出来ない。
  停止しないので、2回目の^Cキーに対し、GDBがデバッグ作業をギブアップするかどうか尋ねてくる。
  ギブアップせずにデバッグ作業を継続すると、最後まで実行してしまった後、スケッチが終了する。
  (なお、LinuxではGDB上に^Cの文字列が表示されましたが、Windowsでは表示されないようです。)



Windows側のGDBのコマンドラインは、以下のようにしました。

E:\tools\micom\Renesas\Linaro\gcc-linaro-arm-linux-gnueabihf-4.7-2013.04\bin\arm-linux-gnueabihf-gdb -ex="target remote ubuntu:2159" build/sketch_jan10a.cpp.elf

なお、"ubuntu:2159"の"ubuntu"は、VMware Player上のUbuntuのネットワークコンピュータ名です。Linux
コマンドプロンプトウィンドウのプロンプトが"ubuntu@ubuntu"だったり、Linuxのsamba接続がWindowsの
エクスプローラに表示される時のコンピュータ名が"UBUNTU"だったりでしたので、試してみたら使えました。

追記 : メモ

Linux Arduino互換ライブラリのソースコードをルネサスRZ/A1Lマイコン搭載のコンピューテックス社製評価
ボードCEV-RZ/A1LのCEV Linux SDK V2.00.00 arm-buildroot-linux-uclibcgnueabihf GCC 4.7.3でビルド
(ただし、stripコマンドは実行しないようスキップさせましたが) 、同様に試してみると、Linaro ARM Linux
GDBで、共有ライブラリのシンボルが見つからないとか、ファイルが見つからないとか、色々とワーニングが
表示されてしまったものの、動かない訳では無さそうな感じでした。




追記 : メモ

KPIT GNU ARM-RZ v13.01やRenesas e2studio V2.2にもWindows版ARM Cross GDBが同梱されています。
これらのGDBはOS対応していないGDBなのですが、いつものように、ちょっと好奇心から、これらのGDBで
Linaro ARM Linux Cross GCC 4.7でビルドしたARM Linux Arduinoスケッチをデバッグ出来るか試してみま
した。結果、これらのGDBでも、まったく動かないという訳でも無さそうな感じでした。(OS内部でブレーク
した時に、何か使用上の制限が発生するのかも?)

KPIT GNU ARM-RZ v13.01に同梱されているGDBの場合

E:\tools\micom\Renesas\KPIT\GNUARM-RZ-EABI\v13.01\arm-rz-eabi\arm-rz-eabi\bin\arm-rz-eabi-gdb.exe -ex="target remote ubuntu:2159" build/sketch_jan10a.cpp.elf




Renesas e2studio V2.2に同梱されているGDBの場合

E:\tools\micom\Renesas\e2v2\DebugComp\arm-rz-eabi-gdb.exe -ex="target remote ubuntu:2159" build/sketch_jan10a.cpp.elf




追記 : メモ

ひょっとしたら、i586-poky-linux-uclibc GCCでビルドしたx86 Linux Arduinoスケッチも、MinGW GDBや
Cygwin GDBでデバッグ出来ないこともないかもしれない、という気がして試してみたら、はやり、動かない
という訳でも無さそうな感じでした。(OS内部でブレークした時に、何か使用上の制限が発生するのかも?)

MinGW GDBの場合

E:\tools\windows\MinGW\bin\gdb.exe -ex="target remote ubuntu:2159" build/sketch_jan10a.cpp.elf




Cygwin GDBの場合

E:\tools\windows\cygwin\bin\gdb.exe -ex="target remote ubuntu:2159" build/sketch_jan10a.cpp.elf




追記 : メモ

ちなみに、試した何れのWindows版GDBも、^CキーでGDBが終了してしまうようなことはありませんでした。

関連記事

2014/02/06   blog-entry-417   category: Arduino Lib & CrossGCC

go page top