2016-11-07 1 views
0

gdb semble être dans un mauvais état après avoir essayé de franchir une ligne ou deux, après avoir atteint un point d'arrêt. Y a-t-il quelque chose de spécifique que je peux faire dans Eclipse pour résoudre ce problème?gdbserver ne marche pas correctement (bras cortex a9) dans Eclipse

Repro:

  1. Démarrer une session de débogage dans Eclipse, attaché à la cible à distance
  2. Définir un point d'arrêt dans Eclipse, puis le déclencher sur la cible.
  3. Le point d'arrêt est touché correctement dans Eclipse. Maintenant, «enjambe» une ligne ou deux.

Résultat attendu:

  • 'étape sur' exécutera une ligne, que vous auriez normalement attendre.

Résultat réel:

  1. Au lieu d'aller au numéro suivant de la ligne, il semble que le programme « continue ». Dans la vue de débogage dans Eclipse, l'arborescence affichant tous les threads les minimise tous, et ils ne peuvent pas être développés pour afficher la pile en cours. De plus, les boutons "step ..." ne sont plus activés et les boutons "pause" et "stop" peuvent être activés. Cela implique que le programme est en cours d'exécution, ce qui n'est pas prévu, car nous avions précédemment pressé "step over". En regardant la cible, elle ne fonctionne pas, mais elle est toujours en pause.
  2. Si nous tapons 'pause' dans Eclipse, puis ouvrons le thread spécifique avec le point d'arrêt, nous pouvons voir le pointeur d'instruction est de retour à l'endroit correct que nous attendons qu'il se trouve après avoir appuyé sur 'step over' précédemment. Donc, à première vue, il semble que nous avons juste un hoquet dans notre flux de travail, et il suffit de cliquer sur 'pause' pour trouver notre fil de discussion précédent, quand le pas ne se comporte pas correctement. Mais bientôt les choses s'arrêtent de fonctionner ...

J'ai été capable de reproduire ce problème sans Eclipse, en utilisant simplement la ligne de commande gdb et le serveur distant gdbserver. Le même comportement se produit. Une solution de contournement potentielle hacky est - une fois que vous avez atteint votre point d'arrêt, 'set scheduler-locking on'. Après cela, vous pouvez passer au contenu de votre coeur. Mais, je ne comprends pas très bien ce que ça fait.

Quelqu'un a-t-il des commentaires?

Merci.

Répondre

0

Une fois que vous avez connecté à l'appareil, dans la console Eclipse GDB, entrez:

programmateur verrouillage ensemble étape

Ceci est une commande client gdb que l'interface utilisateur de l'Eclipse ne supporte pas directement, donc vous devez l'entrer manuellement. Vous pouvez également l'ajouter en tant que point d'ancrage à une autre commande qu'Eclipse appelle au cours du processus d'installation. Vous n'avez donc pas besoin de le taper manuellement. La mise en garde est qu'il doit être appelé APRÈS que l'appareil est connecté. Donc, vous ne pouvez pas simplement appeler cette commande directement dans votre fichier gdbinit, il doit s'agir d'un hook (si vous essayez d'automatiser cette étape, au lieu de taper la commande directement dans la console).