7

x86_64 suse linuxで32ビットアプリケーションをリモートデバッグしようとしましたが、この「リモートレジスタのフォーマットが正しくありません」というエラーが発生します。

ポート12345(gdbserver localhost:12345 my_prog)でリッスンしているようにgdbserverを起動します

そしてこれはエラーです:

$ gdb
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
(gdb) target remote <ip>:12345
Remote debugging using <ip>:12345
Remote register badly formatted: T0506:0000000000000000;07:80b8bcff00000000;10:4028f0f700000000;
here: 0000000;07:80b8bcff00000000;10:4028f0f700000000;
(gdb)

これはデバッグサーバーマシン(uname -a)です:

Linuxサーバー2.6.16.60-0.31-smp#1 SMP Tue Oct 7 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

そして、これはデバッグクライアントマシン(uname -a)です:

Linuxクライアント2.6.16.54-0.2.5-デフォルト#1 Mon Jan 21 13:29:51 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

ただし、両方のマシンは仮想マシン(VMWare)で実行されています。gdbserverバイナリは、クライアントマシンからサーバーマシンにコピーされます。

(デバッグサーバーのランタイム環境は本番環境に似ており、開発ツールやソースコードへのアクセスなどが含まれていないため、リモートデバッグします。)

どんな提案でも大歓迎です。

更新:これは、gdbで次のコマンドを発行することで機能しました:

アーキテクチャi386:x86-64を設定します

4

5 に答える 5

3

set architecture i386おそらく、(gdb)プロンプトで何かを実行する必要がありますか? show architectureリモート ターゲットに接続した後、何と言いますか?

于 2009-03-30T16:38:36.780 に答える
2

64 ビットの GDB は、32 ビットと 64 ビットの下位プロセスの両方を直接デバッグできます (これはマルチアーキテクチャ サポートと呼ばれていると思います)。

ではそうでgdbserverはありません: マルチアーキテクチャのデバッグをサポートしていません。

gdbserverターゲット アーキテクチャと一致する が必要であり、それは とgdb一致しgdbserverます。ソースからビルドし、--target=i686.

于 2009-04-04T22:03:12.103 に答える
0

ターゲット プログラムのコピーを使用して、ホスト マシンで gdb を実行する必要があると思います。つまり、ターゲット マシンで実行する場合は、ホスト マシンgdbserver myprogにコピーして実行する必要があります。myproggdb myprog

このようにして、ホスト マシン上の gdb は、実行可能ファイルからアーキテクチャを自動的に取得します。このようにホスト上で gdb を実行すると、シンボルも読み込まれますが、それがないと、未解決のシンボル (疑問符) が表示されます。

于 2014-12-18T12:31:34.190 に答える
0

すでにチェック済みかもしれませんが、次のことを確認してください。- 「-nx」(初期化ファイルなし) スイッチを使用して gdb を実行してみましたか?

于 2009-03-30T17:15:06.210 に答える
0

1)ターゲットマシンとホストマシン(ケースのターゲットマシンに適合するもの)に適切なgdbserverが必要です。

x86 ホストから ppc ターゲットをデバッグしたいとします。

ターゲットに ppc 実行可能 gdbserver が必要です。

私のホストには、powerpc 用の x86 実行可能 gdb が必要です。

これらのことを設定したら、共有ライブラリを使用する場合にターゲットに接続する前に、ホスト gdb から次のことを行う必要があります。

solib-absolute-prefix $ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE を設定します

dir $ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE

そうしないと、ホスト gdb が x86 の共有ライブラリをロードしようとしておかしくなるでしょう。

于 2009-05-28T22:17:49.933 に答える