42 votes

La GDB ne fonctionne pas sous macOS Sierra

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

GDB lui-même est en cours d'exécution OK. Toutefois, en quelque sorte, il ne peut pas exécuter mon programme. Quand je tape " run " et "enter", il se bloque immédiatement l'information: During startup program terminated with signal SIG113, Real-time event 113.

Mon GDB est basé sur homebrew. Donc, aujourd'hui, j'ai désinstallé l'ensemble de l'homebrew paquet et de le réinstallé. Après le codesign étape, j'ai toujours confronté à la même erreur.

J'ai essayé de 'sudo' et quelques autres choses. Google avait aucune idée de ce qui s'est passé. Donc je me demandais si vous les gars pourrait avoir une certaine solution magique.

62voto

Salamit Points 889

C'est de cette façon que j'facilement résolu le problème. [Mise à jour: sur la base des commentaires reçus et encore à 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. À l'aide de votre éditeur de texte par exemple Sublime de Texte, enregistrer un fichier appelé .gdbinit dans votre dossier utilisateur.
  3. Dans le fichier, ajoutez la ligne suivante: set startup-with-shell off
  4. Enregistrez le fichier
  5. gdb devrait maintenant fonctionner

Sources

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

Où est .gdbinit est situé et comment puis-je le modifier?

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

11voto

Michał Ciołek Points 169

J'ai eu le même message d'erreur après la mise à jour de macOS Sierra. Temporairement, j'ai changé débogueur LLDB à l'aide de 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 lldbmi2 est installé, vous pouvez déboguer votre application par la création d'une nouvelle Application C/C++ dans le Debug Configurations... et changer le débogueur GDB (dans le Débogueur de l'onglet) de gdb pour lldbmi2. Options de lldbmi2 peuvent être définies. Quelque chose comme /usr/local/bin/lldbmi2 --log.

enter image description here

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

5voto

user3869292 Points 51

Cela est dû à un temps d'Exécution de l'Intégrité de la fonction de Protection en Sierra - vous pouvez les désactiver en suivant les instructions ici.

  1. Redémarrez votre système Gardez commande+R enfoncées jusqu'à ce que le logo Apple apparaît sur l'écran.
  2. Sélectionnez le menu Utilitaires/Terminal de Type "csrutil activer --sans debug" dans le terminal
  3. Enfin, redémarrez votre machine

Notez que la désactivation de cette mesure permettra de réduire la sécurité de votre système, de sorte faire ci-dessus devrait vraiment être votre décision.

Un autre impact de ce changement est que la variable DYLD_LIBRARY_PATH n'est plus de se réinitialiser lorsque de nouvelles zones de frai processus via le shell. Cette variable est utilisée par l'éditeur de liens dynamique pour trouver des bibliothèques dynamiques. Il l'emporte sur le chemin de recherche codé dans les exécutables, donc est considérés comme dangereux par l'OS. En conséquence, macOS par défaut unsets la variable de sorte que le fichier exécutable que vous frayer utilise ses propres bibliothèques. Nous vous recommandons d'utiliser le DYLD_FALLBACK_LIBRARY_PATH au lieu de cela, qui vient après l'application du chemin de recherche des bibliothèques, dans le cas où certaines bibliothèques sont toujours pas trouvé.

5voto

Yannick Moy Points 51

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), ainsi que de la désactivation de la création d'un shell avec 'set startup-with-shell off'. Voir les instructions sur http://blog.adacore.com/gnat-on-macos-sierra

5voto

Jinmiao Luo Points 69

supposons que votre version de MacOS est 10.12.6.

  1. mettez à niveau 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 infusion)
  3. créer un certificat avec le nom gdb-cert et faire confiance à ce certificat dans l'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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X