2016-01-02 2 views
2

J'essaie de déboguer à distance en utilisant gdb. Sur l'ordinateur cible (Raspberry Pi avec Ubuntu Mate 15.10), je cours gdbserver :4444 main. Et sur mon ordinateur portable, je cours ./arm-linux-gnueabihf-gdb ~/workspace/piCCompileProj/Debug/main. À l'invite de gdb (sur mon ordinateur portable), type I:Comment utiliser gdbserver sur Raspberry Pi?

target remote <target>:4444 
run 

Mais gdb rapports ce message d'erreur:

La cible "à distance" ne supporte pas "run". Essayez "aider la cible" ou "continuer".

Comment puis-je utiliser gdb remote? Quand j'utilise gdb directement sur le Raspberry Pi, il fonctionne comme prévu.

+0

Avez-vous déjà obtenu ce travail parce que vous avez ouvert une autre [question] (http://stackoverflow.com/questions/34569855/gdb-symbol-dont-load) loin ce point. Si oui, vous pouvez répondre à votre propre question pour partager votre expérience. –

Répondre

1

Je trouve la solution à mon problème.

Si je cours gdbserver :4444 main sur mon PI le programme principal commencera et n'est pas nécessaire pour run comand dans gdb. Pour avoir le plein contrôle sur gdb J'utilise en PI gdbserver --multi :4444 un en mai PC local j'utiliser la commande: ./arm-linux-gnueabihf-gdb -x /path/init où le contenu du fichier /path/init est:

symbol-file /home/username/workspace/piCCompileProj/Debug/main 
target extended-remote 192.168.0.100:4444 
set remote exec-file /home/username/cppSandbox/main 
0

C'est ce qui m'a aidé (Si un débutant est ici et la recherche de la solution)

Hypothèses: Ubuntu (17.04) ->hôte & Raspberry Pi (Modèle-3b) ->cible, Mon exécutable (.o) Fichier->DoWhile

Étape 1: Créer un fichier exécutable (.o) pour votre fichier cible à partir de votre machine hôte. S'il vous plaît trouver la commande suivante:

arm-linux-gnueabihf-gcc -g dowhile.c -o dowhile

s'il vous plaît télécharger les bibliothèques respectives pour exécuter cette commande avec succès.

Étape 2: Copiez le fichier exécutable généré (dowhile.o) sur la machine cible, comme indiqué ci-dessous:

scp dowhile [email protected]:/xxxx/yyyy/

(S'il vous plaît remplir x et les détails y en fonction de votre cible et source)

Vérifiez également l'exécutable copié fonctionne bien:

./dowhile

Étape 3: Exécutez gdbserver sur votre machine cible:

gdbserver localhost:2000 dowhile

(Keep 2000 ou tout autre numéro pour votre port, il fonctionnera de toute façon)

Étape 4: Exécutez gdb sur votre machine hôte:

gdb-multiarch dowhile

Étape 5: Définir l'architecture comme bras

(gdb) set architecture armv5te

Étape 6: Connectez votre cible à distance

(gdb) target remote 10.x.y.z:2000

Et vous avez terminé :)

débogage heureux !!!