###実現したいこと・聞きたいこと
0. gdbserverを使って実行中のプロセスをリモートデバッグしたい
→ (現状)現在リモートデバッグでエラーが出ており正常にデバッグが出来ていない。
0. 実行中のプロセスをCLIではなくEclipse等のIDEを用いてデバッグをしたい
→ 1.が実現できたとして、EclipseなどのGUIでデバッグを行いたい
2 についてインターネット上ではホスト環境にクロスコンパイル環境を整え、クロスコンパイル後にバイナリを転送してリモートデバッグを行っている記事が多いですが、リモート側でgdbserverを使って既に実行中にプロセスにアタッチ、ホスト側でGUIでデバッグすることは可能なのか(ホスト側にソースは用意していない)
###構成
raspberryPi(gdbserver,192.168.100.250) <---> Ubuntu(gdb,192.168.100.254)
- ホストはUbuntu
- リモートはRaspberryPiで、プログラムを実行中
RasbewrryPi側で以下のコマンドを実行
bash
1$gdbserver --multi localhost:10000 --attach (実行中のプログラムのPID)
Ubuntu側で
RaspberryPiのクロスコンパイル環境を構築し以下のコマンドを実行
bash
1$arm-linux-gnueabihf-gdb 2(gdb)target remote 192.168.100.250:10000
###発生している問題
warningが表示されて正常にデバッグが出来ない。
Ubuntu側のコンソール画面
bash
1(gdb) target remote 192.168.100.250:10000 2A program is being debugged already. Kill it? (y or n) y 3Remote debugging using 192.168.100.250:10000 4warning: Could not load vsyscall page because no executable was specified 5try using the "file" command first. 60x76fcfca0 in ?? ()
###ソースコード
Timer.c
C
1#include<stdio.h> 2#include<time.h> 3void main() { 4 int i = 0; 5 6 while (1) { 7 ++i; 8 printf("hello "); 9 printf("Timer:%d \n", i); 10 sleep(1); 11 } 12}
コンパイル
bash
1$ gcc -g3 ./Timer.c -o Timer
###試したこと
問題の切り分けのために以下の作業を行いましたが、結局究明に至りませんでした。
- 実行中のプロセスにアタッチしていることが原因?
→ gdbserverコマンドで--attachは使わずにプログラム実行。同様のエラーが発生。
bash
1$gdbsever localhost:10000 Timer
- gdbserverが原因?
→ Ubuntuからではなく、直接RaspberyPi上でgdbを行うと正常に動作するので、クロスコンパイル環境は正しくリモート環境が上手くいっていない?
bash
1$gdb Timer
- Eclipseを使ってクロスコンパイル環境を整えて実行
http://blue-black.ink/?page_id=2392
上記のサイトを参考に実施するとリモートデバッグが正常に出来たため、リモート環境が悪いわけではない?
###補足情報
ホスト側
gdb:GNU gdb (GNU gdb (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) 7.6.1-2013.10
リモート側
gdbserver:GNU gdbserver (Raspbian 7.7.1+dfsg-5+rpi1) 7.7.1
あなたの回答
tips
プレビュー