15

アドレス 192.168.98.64 のマシンで実行されているアプリケーションをリモート デバッグしようとしています。そのマシンで私は実行します:

gdbserver serveripaddr:4444 プログラム名

次に、サーバーから「gdb」を実行し、gdb プロンプトで次を実行します。

(gdb) ターゲット リモート 192.168.98.64:4444
192.168.98.64:4444 を使用したリモート デバッグ
[新しいスレッド 28432]
警告: 実行可能ファイルが指定されていないため、vsyscall ページを読み込めませんでした
最初に「file」コマンドを使用してみてください。
0xb775e810 in ?? ()
(gdb) break internal[TAB]

内部で始まる対応する関数のリストを表示するためにブレークポイントを設定しようとしたときに TAB キーを押すことを期待していましたが、何も表示されません。コードは、-g でデバッグをオンにしてコンパイルされています。私は何を間違っていますか?

4

3 に答える 3

13

「gdb」を実行します

デバッグ中の実行可能ファイルを GDB に渡す必要があります (できれば、ストリップされていないバージョン)。

gdb /path/to/progname
(gdb) target remote 192.168.98.64:4444
于 2012-12-24T00:53:13.293 に答える
6

クロスコンパイルされた gdb を使用したときに、この問題に遭遇しました (通常、リモート ホストのアーキテクチャが異なる場合、これが必要になります)。この場合、リモート ホストでコンパイルされたバイナリからシンボルを読み取る必要があります。次のことがうまくいくことがわかりました(ホストのアーキテクチャが同じ場合も):

リモート ホストで次の手順を実行します。

gdbserver [host]:[port] [remote-path-to-binary-from-gdbserver-workdir]

次に、(クロスコンパイルされた)gdbのローカルホストで:

shell sleep 5
target remote [host]:[port]
symbol-file remote:[remote-path-to-binary-from-gdbserver-workdir]
directory [local-root-directory-for-source-files]
continue

をデータに置き換え[*]ます。これを gdb スクリプトとして使用するか (したがって、sleep最初の行で)、gdb コマンド ラインで入力することができます。オプションのディレクトリ行は、ソースの検索パスにローカル ソース ディレクトリを追加するように指示します。これは、ソース コードを示すフロントエンドを使用する場合に役立ちます。

于 2013-02-06T09:43:40.560 に答える