2009-03-30 12 views
5

x86_64 suse linux上で32ビットアプリケーションをリモートデバッグしようとしましたが、この「リモートレジスタが不正にフォーマットされました」というエラーが発生しました。GDBによるリモートデバッグエラー

私は、ポート12345(gdbserverをローカルホスト: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火10月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月1月21日午後01時29分51秒UTC 2008 x86_64のx86_64でのx86_64のGNU/Linuxの

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

(デバッグサーバー上のランタイム環境は本番のようであり、任意の開発ツールが含まれていない、などのソースコードにアクセスするので、私は、リモートデバッグ)

任意の提案を歓迎いたします。

UPDATE:

セットi386アーキテクチャを:これは、GDBで次のコマンドを発行して私のために働いた x86-64の

答えて

3

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

+0

i386(自動)です。実際には、 "i386:x86-64:intel"に設定すると、エラーメッセージなしで起動しますが、コードをステップインすると、 "0x1f7fb5000番地のメモリにアクセスできません"というメッセージが表示されます。 – boffman

+0

クライアントマシンですべてのもの(gdbserver、gdb、32-bit app)を実行できますか?あなたは同じ問題にぶつかりますか? – sigjuice

0

- 64ビットマシンでは、32ビットのライブラリ(libcなど)がありますか? - "-nx"(初期化ファイルなし)スイッチでgdbを実行しようとしましたか?

+0

はい、32ビットのlibsは/ libにあり、64ビットは/ lib64にあります。私はgdb -nxを試しましたが、違いは気付きませんでしたか? – boffman

2

64ビットのGDBは、32ビットと64ビットの両方の劣悪なプロセスを直接デバッグできます(これはマルチアーチサポートと呼ばれています)。

gdbserverではありません。マルチアーチデバッグはサポートされていません。

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

0

1)あなたは、あなたの場合には、ターゲットマシンに合う1(ターゲット・マシンとホストマシンのための適切gdbserverをする必要

のは、私は、x86ホストからppcのターゲットをデバッグしたいとしましょう:。

ppc実行可能ファイルgdbserverが必要です。

powerpc用にx86実行可能ファイルが必要です。

セットsolib絶対接頭辞$ ELDK_PREFIX/eldk-4.2-:あなたはそれらのものを使用して設定された後

あなたが共有ライブラリを使用する場合には、ターゲットに接続する前に、あなたのホストのGDBから次の操作を実行する必要がppc_4xx/$ CROSS_COMPILE

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

そうでない場合は、ホストのGDBは、x86用の共有ライブラリをロードしようと狂ったでしょう。

0

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

このように、ホストマシン上のgdbは自動的に実行可能ファイルからアーキテクチャを選択します。このようにホスト上でgdbを実行するとシンボルがロードされ、未解決のシンボル(疑問符)が表示されません。

関連する問題