J'ai trouvé un problème similaire (& cette question) reliant gdb très tôt dans le processus de démarrage - comme mentionné dans d'autres réponses, gdb n'apprécie pas vraiment la taille des registres qui en sortent. Ce problème peut être vu à l'aide 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)
Patching gdb to resize its internal buffer when it sees a too-large packet que l'on trouve sur cette question dans le bug tracker gdb (et ailleurs), ne fonctionne en effet autour du problème, tout comme rapiéçage QEMU pour envoyer seulement 64 bits paquets -sized. Cependant, the latter solution breaks debugging in non-64-bit-modes, et il semble que l'ancienne solution pourrait être incomplète:
Il semble tout à fait tort de changer la cible derrière le dos de GDB quand GDB est déjà déboguer. Non seulement la taille des paquets g/G peut changer par inadvertance, mais la mise en page aussi bien. Si la description de la cible change avec votre reconfiguration, me semble que GDB devrait aller chercher/recalculer toute la description cible. Aujourd'hui, je pense que cela ne peut être fait avec un déconnecter/reconnecter.
- https://sourceware.org/ml/gdb/2014-02/msg00005.html
Le déconnexions/reconnexions solution de contournement mentionnée à la fin du poste ne semble fonctionner:
(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
...
Mon vm exécute ubuntu et l'hôte exécute debian – contemplatingzombie
Si je vois le code gdb, remote.c/* Description des registres de protocole distant. */long sizeof_g_packet; ne correspond pas à prévu. On dirait que votre gdbserver n'est pas configuré correctement (je ne suis pas très sûr cependant). Initiez-vous le serveur GDB? Si oui, la version GDB et GDBSERVER correspond-elle? – Kamath
Similaires sur le bugtracker GDB: https://sourceware.org/bugzilla/show_bug.cgi?id=13984 –