web-dev-qa-db-fra.com

GDB ne fonctionne pas sous macOS Sierra

C'est un problème qui est apparu lorsque j'ai mis à jour macOS Sierra hier.

GDB fonctionne correctement. Cependant, d’une manière ou d’une autre, il ne peut pas exécuter mon programme. Lorsque je tape 'run' et 'enter', il se bloque immédiatement avec les informations suivantes: During startup program terminated with signal SIG113, Real-time event 113.

Mon GDB est basé sur l'homebrew. Donc, aujourd’hui, j’ai désinstallé l’ensemble du paquet homebrew et je l’ai réinstallé. Après l'étape de la codification, j'ai toujours fait face à la même erreur.

J'ai essayé 'Sudo' et quelques autres choses. Google n'avait aucune idée de ce qui s'était passé. Je me demandais donc si vous aviez une solution magique.

41
Scott Chang

Voici comment j'ai facilement résolu le problème. [Mise à jour: sur la base des commentaires reçus et à vérifier, il semble que cette solution fonctionne avec macOS Sierra 10.12 mais pas avec macOS Sierra 10.12.2]

Voir les instructions vidéo ici

  1. Quittez gdb
  2. Utilisation de votre éditeur de texte, par exemple Texte sublime, enregistrez un fichier nommé .gdbinit dans votre dossier utilisateur.
  3. Dans le fichier, ajoutez ce qui suit: set startup-with-Shell off
  4. Sauvegarder le fichier
  5. gdb devrait maintenant fonctionner

Sources

https://discussions.Apple.com/thread/7684629?start=0&tstart=

Où se trouve .gdbinit et comment puis-je le modifier?

https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

60
Salamit

J'ai eu la même erreur après la mise à jour vers macOS Sierra. J'ai temporairement changé le débogueur en LLDB en utilisant la bibliothèque lldbmi2 :
1. git clone https://github.com/freedib/lldbmi2.git lldbmi2
2. cd lldbmi2
3. mkdir build
4. cd build
5. cmake ../
6. make
7. Sudo make install

Une fois que lldbmi2 est installé, vous pouvez déboguer votre application en créant une nouvelle application C/C++ dans les configurations de débogage ... et changer le débogueur GDB (dans l'onglet Débogueur) de gdb à lldbmi2. Les options de lldbmi2 peuvent être définies ici. Quelque chose comme/usr/local/bin/lldbmi2 --log.

enter image description here

Tout semble bien fonctionner, et même mieux que GDB.

10
Michał Ciołek

Plusieurs solutions ayant fonctionné pour Sierra 10.12.0 ne fonctionnent pas avec Sierra 10.12.1. Avec cette version, vous avez besoin d'une version mise à jour de GDB (correctif validé sur FSF le 9 novembre), en plus de la désactivation de la génération de Shell avec 'set startup-with-Shell off'. Voir les instructions sur http://blog.adacore.com/gnat-on-macos-sierra

5
Yannick Moy

Cela est dû à une fonctionnalité de Runtime Integrity Protection de Sierra - vous pouvez la désactiver en suivant les instructions ici .

  1. Redémarrez votre système. Maintenez la commande + R enfoncée jusqu'à ce que le logo Apple) apparaisse à l'écran.
  2. Sélectionnez le menu Utilitaires/Type de terminal "csrutil enable --without debug" dans le terminal.
  3. Enfin, redémarrez votre machine à nouveau

Notez que désactiver cette option réduira la sécurité de votre système. Vous devez donc prendre cette décision.

Un autre impact de ce changement est que la variable DYLD_LIBRARY_PATH n'est plus réinitialisée lors de la création de nouveaux processus via le shell. L'éditeur de liens dynamique utilise cette variable pour rechercher des bibliothèques dynamiques. Il a priorité sur le chemin de recherche codé dans les exécutables, il est donc considéré comme non sécurisé par le système d'exploitation. Par conséquent, macOS désactive par défaut la variable afin que le fichier exécutable que vous créez utilise ses propres bibliothèques. Nous vous recommandons d'utiliser DYLD_FALLBACK_LIBRARY_PATH à la place, qui vient après le chemin de recherche de la bibliothèque de l'application, au cas où certaines bibliothèques ne seraient toujours pas trouvées.

5
user3869292

supposons que votre version de MacOS est 10.12.6.

  1. mettez à jour votre gdb vers la version 8.0.1 brew upgrade gdb
  2. exécuter echo "set startup-with-Shell off" >> ~/.gdbinit _ (J'ai vu cette commande lorsque j'ai installé gdb par brassage)
  3. créer un certificat avec le nom gdb-cert et faites confiance à ce certificat en option de signature de code
  4. redémarrez votre mac
  5. exécuter Sudo codesign -s gdb-cert /usr/local/bin/gdb
  6. terminé! amusez-vous ~

En passant, vous pouvez utiliser lldb pour remplacer gdb.

5
Jinmiao Luo

J'ai eu plusieurs problèmes avec Sierra.

Pour commencer, mon code qui avait fonctionné sur les versions précédentes d'OSX a cessé de fonctionner sur cette version. Il ne compilerait pas non plus. De plus, GDB de Brew est un gâchis total. Ajouter des bibliothèques tierces a été cassé (par exemple, libevent).

("Bon travail" Apple).

Après la "mise à niveau" vers Sierra, je suggère les étapes suivantes pour que GDB fonctionne:

  1. Installez un nouveau gcc (devrait prendre environ 60 minutes - en fonction de votre CPU, etc ...)

    brasser installer gcc

  2. Télécharger le code source de GDB

  3. Puisque gcc et g ++ sont des alias avec les anciens gcc et g ++, assurez-vous de les lier aux nouveaux gcc et g ++, par exemple:

    exportation CC = `quel gcc-6`

    exportation CXX = `quel gxx-6`

  4. Configurez et compilez gdb:

    ./configurer

    make CFLAGS = -Wno-error = déclarations obsolètes CXXFLAGS = -Wno-error = déclarations obsolètes

    Sudo fait installer

4
Tomer

Cela fonctionne pour moi:

  • Dissocier la gdb actuelle: brew unlink gdb

  • Installez gdb 8.0.1: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb

  • Facultatif: évitez la mise à niveau de gdb avec brew pin gdb

4
fgriberi

Je sais que ma réponse n’est pas spécifiquement liée à GDB, mais comme j’ai également eu quelques difficultés à faire fonctionner GDB moi-même, je voudrais vous recommander d’essayer LLDB. Pour moi, cela a fonctionné comme un charme:

https://developer.Apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-terminal-workflow-tutorial.html

Puisque Xcode lui-même utilise maintenant LLDB au lieu de GDB, cela peut constituer une alternative plus pratique pour les utilisateurs de Mac. Et, dans mon cas particulier, cela s’intègre beaucoup plus facilement dans Eclipse que dans GDB:

https://wiki.Eclipse.org/CDT/User/FAQ#How_do_I_get_the_LLDB_debugger.3F

2
Carlos Ballock