Je « suis actuellement bloqué par un problème de débogage à distance de mon application avec gdb
. Jaimerais avoir le possibilité de se connecter à un processus distant et dutiliser le débogage visuel de IDE
« (jutilise Visual Studio Code
).
Le Le problème est que lEDI peut sattacher à un processus local par son pid
, ce qui nest pas vraiment utile. Donc, si je demande une redirection de port local, je pourrais utiliser le port local pour transférer la connexion, ce qui nest pas vraiment ce que je veux.
Est-il possible de faire quelque chose comme « pid-forwarding » cest-à-dire que jai mis un div id = « fac3326e75″>
qui est en fait un processus distant.
Commentaires
- Vous ' ne dit pas ce que lEDI utilise (et comme je ' nutilise aucun IDE, je ne serais probablement pas ' capable de vous aider). Mais vous devriez regarder dans gdbserver – ce ' est un petit programme qui pourrait sexécuter sur un système embarqué / restreint, et vous pouvez vous y connecter avec le ' gros débogueur ' depuis une machine plus puissante.
- @UncleBilly je lai fait. " Jutilise Visual Studio Code ". Malheureusement, il est documenté quil ne prend pas en charge le débogage à distance …
- @UncleBilly gdbserver semble être ce que je voulais. Merci.
Réponse
Comme Oncle Billy dit, une bonne façon de faire est dutiliser les capacités de débogage à distance de GDB. Cela fonctionne en exécutant un «petit» débogueur sur lhôte exécutant le processus que vous souhaitez déboguer et en vous connectant à celui-ci en utilisant gdb
depuis lhôte exécutant votre environnement de développement. Étant donné que de nombreux IDE (y compris VS Code) prennent en charge le débogage à laide de gdb
, vous pouvez bénéficier du confort de votre environnement de développement ciblé sur les processus sexécutant nimporte où, y compris sur dautres plates-formes.
Sur lhôte exécutant le processus que vous souhaitez déboguer, vous devez installer gdbserver
(souvent en copiant un binaire statique), et lexécuter; par exemple:
gdbserver --attach :9953 ${pid}
listera sur le port 9953 et sattachera à lidentifiant de processus donné. Vous pouvez spécifier différentes manières de vous connecter au serveur (ports série, adresses IP …), et soit exécuter une commande de débogage, soit vous attacher à un processus en cours dexécution, soit même exécuter un «serveur de débogage» sans processus spécifique .
Sur lhôte avec votre environnement de développement, vous vous connectez à la cible dans gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Tout le reste fonctionne comme dhabitude. gdb
transférera les fichiers dont il a besoin (bibliothèques, etc.) de la cible distante, mais pour accélérer les choses, vous pouvez le pointer vers une copie locale des fichiers. Il utilisera des sources locales.
Cela fonctionne comme prévu lorsque les deux hôtes sont identiques, mais il peut aussi être fait pour fonctionner avec des hôtes différents, par exemple pour déboguer un programme Windows à partir dun système Linux, ou plus généralement, un programme fonctionnant sur un petit système embarqué à partir dune plus grande plate-forme de développement.