19

kvm vm で Linux カーネルをデバッグしようとしています。「リモート 'g' パケット応答が長すぎます」というエラー メッセージが表示されます。私のホストは 64 ビットで、私の vm もそうです。

私の手順:

  1. カスタムの -kernel、-initrd、および -append オプションを使用して VM を起動します。
  2. gdb を起動
  3. 「set Architecture i386:x86-64:intel」を実行
  4. 「add-symbol-file linux-3.0/vmlinux」を実行
  5. 「show arch」を実行して、まだ「i386:x86-64:intel」であることを確認します。
  6. 「ターゲット リモート localhost:1234」を実行します。
  7. 「続行」を実行
  8. Ctrl+C を押すと、上記のメッセージが表示されます。

誰もこの問題に直面しましたか?

4

4 に答える 4

14

gdb は、実行時に命令セットを切り替える CPU に対してはうまく機能しません。-S接続する前にカーネルが早期起動を終了するのを待ち、qemu のフラグを使用しないでください。

于 2013-05-09T11:33:56.643 に答える
10

私も同じ問題に直面しました.gdbstub.c(qemuソース内)を変更して常に64ビットレジスタを送信し、渡すことでアーキテクチャが64ビットであることをGDBに示唆することで修正しましたset arch i386:x86-64

ここでパッチを確認できます: [URL は利用できなくなりました] にアクセスしてください。

于 2012-02-06T04:12:37.460 に答える
7

ブート プロセスの非常に早い段階で gdb を接続する同様の問題 (およびこの質問) を見つけました。この問題は、次を使用して確認できますset debug remote 1

(gdb) set debug remote 1
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
...
Sending packet: $g#67...Ack
Packet received: 000000000000000... <~600 bytes>
(gdb) until *0x1000 # at this address we'll be in a different cpu mode
...
Sending packet: $g#67...Ack
Packet received: 10000080000000000000000000000000800000c... <~1000 bytes>
...
Remote 'g' packet reply is too long: 1000008000000000000000000...
(gdb)

gdb バグ トラッカー (および他の場所) でこの問題で見つかったように、大きすぎるパケットが検出された場合に内部バッファーのサイズを変更するように gdb にパッチを適用すると 、実際に問題を回避できます。また、QEMU にパッチを適用して 64 ビット サイズのパケットのみを送信するようにします。 . ただし、後者の解決策は非 64 ビットモードでのデバッグを中断し、前者の修正は不完全である可能性があるようです:

GDB が既にデバッグしているときに、GDB の背後でターゲットを変更するのはかなり間違っているように思えます。g/G パケットのサイズが誤って変更されるだけでなく、レイアウトも変更される可能性があります。再構成でターゲットの説明が変更された場合、GDB がターゲットの説明全体を取得/再計算する必要があるように思えます。今日、それは切断/再接続でしかできないと思います。

https://sourceware.org/ml/gdb/2014-02/msg00005.html

投稿の最後に記載されている切断/再接続の回避策は機能しているようです。

(gdb) disconnect
Ending remote debugging.
(gdb) set architecture i386:x86-64
The target architecture is assumed to be i386:x86-64
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
(gdb) info registers
rax            0x80000010   2147483664
rbx            0x0  0
...
于 2015-12-16T04:49:54.647 に答える