web-dev-qa-db-ja.com

gdbリモートクロスデバッグが「リモート 'g'パケット応答が長すぎます」で失敗する

リモートデバッグに問題があります。

ホスト:ubuntu 10.10x86を搭載したラップトップInteli5ターゲット:Freescale iMX35(iMX35 PDK)アーム11開発環境:Qt Creator2.1RCおよびQt4.7.1ライブラリ。パス内のARMコンパイラ:/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin

arm-none-linux-gnueabi-gcc-4.1.2 arm-none-linux-gnueabi-objdump arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gccbug
arm-none-linux-gnueabi-ranlib arm-none-linux-gnueabi-ar
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-readelf arm-none-linux-gnueabi-as
arm-none-linux-gnueabi-run arm-none-linux-gnueabi-c ++
arm-none-linux-gnueabi-size arm-none-linux-gnueabi-c ++ filt
arm-none-linux-gnueabi-gprof arm-none-linux-gnueabi-strings arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-strip arm-none-linux-gnueabi-g ++
arm-none-linux-gnueabi-nm arm-none-linux-gnueabi-gcc
arm-none-linux-gnueabi-objcopy

目標は、Qtで作成されたプロジェクトをデバッグすることです。だから私は単純にQtQuick Project-> Qt Quick Applicationを作成しました。これは単純なHelloWorldアプリケーション(C++/Qml)を作成します。クロスコンパイル(デバッグまたはリリース)すると、ターゲットで正常に動作します。ですから、クロスコンパイルは私がお見せする問題とは関係がないと確信しています。

Gdb 7.2をダウンロードして、次の操作を実行しました。

$ export PATH =/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin:$ PATH
$ cd /home/elux/iMX35/gdb-7.2/
$ ./configure --target = arm-none-linux-gnueabi --build = i686
$ make
$ Sudo make install

$ export CC = arm-none-linux-gnueabi-gcc
$ export LD = arm-none-linux-gnueabi-ld
$ cd gdb/gdbserver /
$ ./configure --build = i386 --Host = arm-none-linux-gnueabi --target = arm-none-linux- gnueabi
$ make

$ Sudo cp gdbserver/home/elux/MX35/ltib/rootfs/usr/bin /(gdbserverをターゲットにコピーするため)

次に、ターゲット上で:

$ gdbserver 10.10.10.1:4000テスト
プロセステストが作成されました。 pid = 2194
ポート4000でリッスンしています

ターゲット上:

$ arm-none-linux-gnueabi-gdbテスト(テストはデバッグモードのQt Creatorでクロスコンパイルされます)GNU gdb(GDB)7.2
Copyright(C)2010 Free Software Foundation、Inc。
ライセンスGPLv3 +:GNU GPLバージョン3以降 http://gnu.org/licenses/gpl.html
これはフリーソフトウェアです。自由に変更して再配布できます。
法律で許可されている範囲での保証はありません。 「showcopying」と入力します
および詳細については「保証を表示」。
このGDBは「--Host = i686--target = arm-none-linux-gnueabi」として構成されました。
バグ報告の手順については、以下を参照してください。
http://www.gnu.org/software/gdb/bugs/ .。
/home/elux/iMX35/ltib/rpm/BUILD/qt-everywhere-opensource-src-4.7.1/platform/Test-build-arm/Test ... doneからシンボルを読み取ります。
(gdb)ターゲットリモート10.10.10.2:4000
10.10.10.2:4000を使用したリモートデバッグ
警告:XMLターゲットの説明を解析できません。 XMLサポートはコンパイル時に無効にされました
警告:ダイナミックリンカーブレークポイント関数が見つかりません。
GDBは共有ライブラリ初期化子をデバッグできなくなります
明示的にロードされた動的コードを追跡します。
0x400007e0 in ?? ()
(gdb)

そして

(gdb)set solib-absolute-prefix/home/elux/iMX35/ltib/rootfs /
/home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3からのシンボルの読み取り...完了。
/home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3のロードされたシンボル

だが

(gdb)アーキテクチャarmv5teを設定します
ターゲットアーキテクチャはarmv5teであると想定されています
リモート「g」パケット応答が長すぎます:00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(gdb)b main
リモート「g」パケット応答が長すぎます:00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

この問題が何に関連しているのか分かりましたか?どうすれば解決できますか?

16
user602888

最近Ubuntu12.04(x86_64)でこれに遭遇し、別の方法で解決したので、コメントしたいと思いました。この場合のキッカーは、Ubuntuでlibexpatが有効になっているgdbがあるように見えることです。後でいじくり回すと、これで解決しました。

セットアーキテクチャi386:x86-64:intel

したがって、これはアーキテクチャの不一致がある場合にも発生する可能性があるようです。

16
Goncalo

代わりにgdb-multiarchを使用して、問題を解決することができました。

14
Jerrill

Ubuntu 11.1064ビットを実行しているi5マシンでFreescale ARMをデバッグしようとすると、これと同じ問題が発生しました。

私のために働いた修正は、gdbを構成するときに-with-expatフラグを指定することでした。また、libexpat1-devパッケージをインストールする必要がありました。

ここでの説明

7
user1272485