Lorsque vous effectuez une session gdb habituelle sur un fichier exécutable sur le même ordinateur, vous pouvez donner la commande run et le programme redémarrera.
Lorsque vous exécutez gdb sur un système intégré, comme avec la commande target localhost: 3210 ', comment relancez le programme sans quitter et redémarrer votre session gdb?
Vous recherchez Mode multi-processus pour gdbserver et set remote exec-file filename
Malheureusement, je ne connais pas de moyen de redémarrer l'application tout en maintenant votre session. Une solution de contournement consiste à ramener le PC au point d'entrée de votre programme. Vous pouvez le faire en appelant:
jump function
ou
set $pc=address
.
Si vous avez assigné les arguments à main
, vous devrez peut-être les configurer à nouveau.
Modifier:
La méthode ci-dessus pose quelques problèmes de mise en garde.
Donc, utiliser jump ne veut pas dire redémarrer le programme.
Vous exécutez probablement gdbserver sur le système intégré.
Vous pouvez lui demander de redémarrer votre programme au lieu de quitter avec target extended-remote
"jump _start" est la méthode habituelle.
Pour moi, la méthode décrite dans 21.2 Exemple de démarrage de session GDB fonctionne très bien. Lorsque je saisis monitor reset halt
plus tard à l'invite «(gdb)», le matériel cible est réinitialisé et je peux redémarrer l'application avec c
(= continuer).
La commande load
peut être omise entre les exécutions, car il n'est pas nécessaire de flasher le programme encore et encore.
Procédure pas à pas
Éloigné:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
Local:
# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
-ex 'set remote exec-file ./myexec' \
--args ./myexec arg1 arg2
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit
Testé sous Ubuntu 14.04.
Il est également possible de transmettre des arguments CLI au programme en tant que:
gdbserver --multi :1234 ./myexec arg1 arg2
et la partie ./myexec
supprime le besoin de set remote exec-file ./myexec
, mais présente les inconvénients suivants:
show args
et ne persiste pas après les redémarrages: https://sourceware.org/bugzilla/show_bug.cgi?id=21980Passer les variables d'environnement et changer le répertoire de travail sans redémarrer: Comment modifier les variables d'environnement et le répertoire de travail de gdbserver --multi sans le redémarrer?
Si vous utilisez gdb standard, vous pouvez taper 'run', raccourci 'r' et gdb vous demande si vous souhaitez redémarrer le programme.
Sur EFM32 Happy Gecko, aucune des suggestions ne fonctionnerait pour moi. Voici donc ce que j’ai appris de la documentation sur l’intégration de GDB dans l’environnement Eclipse.
(gdb) mon reset 0
(gdb) continue
(gdb) continue
Cela me met dans l'état auquel je m'attendais lorsque vous appuyez sur reset depuis l'IDE.