7
votes

Débogage des bibliothèques partagées à distance avec GDB / GDBSERVER

Ma question concerne la télécommande Débogage d'une application sur un processeur de bras intégré à l'aide de GDB / GDBServer.

Je peux déboguer la demande elle-même, mais l'application se lie de manière dynamique vers une bibliothèque partagée qui met en œuvre un protocole de communication interne. Je souhaite pouvoir définir des points d'arrêt dans les fonctions de la bibliothèque partagée afin d'essayer de déterminer certains problèmes de découverte de l'appareil.

Je me suis assuré que la bibliothèque est compilée avec les symboles de débogage et est chargée par GDB du côté hôte, je peux énumérer des fonctions dans la bibliothèque et même définir les points d'arrêt, mais dès que j'essaie d'exécuter l'application, je reçois un Message d'erreur à l'effet de:

Impossible d'insérer un point d'arrêt X.
Erreur lors de l'accès à l'adresse de la mémoire: erreur d'entrée / sortie.

où X est le numéro de point de rupture dans GDB et est une adresse bien au petit pour être valide.
J'utilise la nouvelle bibliothèque sur la cible et la machine hôte, mais via mont -o Bind NewLib OldLib sur la cible d'un montage NFS.
Quelqu'un a-t-il une idée de ce qui pourrait être faux? Merci d'avance.


1 commentaires

4 Réponses :


0
votes

Wild Guess: vous avez chargé la bibliothèque partagée dans l'hôte gdb à une adresse incorrecte.

au lieu de le charger explicitement dans gdb, utilisez "définir l'événement STOP-On-SOLIB sur" , attendez que la bibliothèque soit chargée ( info partagée Votre liste actuelle des bibliothèques chargées) et alors définissez les points d'arrêt.


0 commentaires

0
votes

Utilisez la commande suivante pour définir les points d'arrêt en attente qui seront résolus après que la bibliothèque d'objets partagée soit chargée

set breakpoint pending on


0 commentaires

6
votes

Je vois que cette question est de 2009, mais les réponses actuelles sont obsolètes. Voici une mise à jour:

@employed russe a suggéré que vous devez utiliser arrêter-on-solib-événement . Ce n'est plus vrai; NDK R8D prend en charge les points d'arrêt en attente dans les solibs encore à charger.

@brent Piddy dit que STOP-ON-SOLIB-Event ne fonctionne pas avec GDBSERVER. Ceci n'est plus plus vrai depuis au moins R8C. Ma société dispose d'un produit qui repose sur ce comportement NDK de GDB, nous serions en gros problème sans cela.


0 commentaires

0
votes

exécutez jusqu'à principale , puis Set Solib-Search-path.

Sinon, gdfserver s'arrête sur le chargeur dynamique, avant que les bibliothèques ne soient chargées. AT Main , ils doivent être prêts pour GDB.

Plus de détails: Débogage Bibliothèques partagées avec GDBServer


0 commentaires