151 votes

gdb échoue avec l'erreur "Impossible de trouver le port de la tâche Mach pour le process-id".

Mon application fonctionne bien mais gdb ne parvient pas à la déboguer avec l'erreur suivante

(gdb) run
Starting program: /path/to/app 
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).

Je suis sur OS X Lion. La version de GDB est

$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".

0 votes

Je pense que ce post peut vous aider : stackoverflow.com/questions/10221448/ .

149voto

Mengyuan Points 91

Cela fonctionne lorsque je passe à sudo gdb executableFileName ! :)

2 votes

Merci. Ceci et la signature du code étaient nécessaires pour que gdb fonctionne. J'ai donné à gdb un accès Root (comme décrit ici stackoverflow.com/questions/10476154/ ) pour ne pas avoir à taper sudo à chaque fois. Edit - J'ai trouvé une meilleure approche ici : stackoverflow.com/a/10441587/305149

17 votes

L'exécuter en tant que Root ? Vous êtes sérieux ? La pire des "solutions".

7 votes

@Equidamoid Pourquoi serait-ce si mauvais de courir gdb comme Root ? Je suis juste curieux car c'est juste un débogueur.

74voto

Tyilo Points 6732

Dans Snow Leopard et les versions ultérieures de Mac OS, il n'est pas suffisant de coder l'adresse de l'utilisateur. gdb exécutable.

Vous devez suivre ce guide pour que cela fonctionne : http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt

Le guide explique comment procéder pour lldb mais le processus est exactement le même pour gdb .

19 votes

Ces instructions n'ont pas fonctionné pour moi sur OSX 10.9.2 avec MacPorts, mais ceci a fonctionné : sourceware.org/gdb/wiki/BuildingOnDarwin

0 votes

Ça marche ! Mais pouvez-vous m'expliquer ce que le sudo security add-trust est en train de faire ? Puis-je supprimer le .cer de mon bureau maintenant ?

9 votes

codesign -s gdb_codesign `which gdb` aide après ce guide

33voto

qed Points 1769

Vous devez créer un certificat et signer gdb :

  • Ouvrir l'application "Keychain Access" (/Applications/Utilities/Keychain Access.app)
  • Ouvrir le menu /Accès au trousseau/Certificate Assistant/Créer un certificat...
  • Choisissez un nom (gdb-cert dans l'exemple), réglez le "Type d'identité" sur "Racine auto-signée", réglez le "Type de certificat" sur "Signature de code" et sélectionnez l'option "Let me override defaults". Cliquez sur "Continuer". Vous pourriez vouloir étendre la période prédéfinie de 365 jours à 3650 jours.
  • Cliquez plusieurs fois sur "Continuer" jusqu'à ce que vous arriviez à l'écran "Specify a Location For The Certificate", puis réglez "Keychain to System".
  • Si vous ne pouvez pas stocker le certificat dans le trousseau "System", créez-le dans le trousseau "login", puis exportez-le. Vous pouvez ensuite l'importer dans le trousseau "Système".
  • Dans les trousseaux de clés, sélectionnez "Système", et vous devriez trouver votre nouveau certificat. Utilisez le menu contextuel du certificat, sélectionnez "Get Info", ouvrez l'élément "Trust", et réglez "Code Signing" sur "Always Trust".
  • Vous devez quitter l'application "Keychain Access" afin d'utiliser le certificat et redémarrer le service "taskgated" en tuant le processus "taskgated" en cours. Vous pouvez également redémarrer votre ordinateur.
  • Enfin, vous pouvez signer gdb :

    sudo codesign -s gdb-cert /usr/local/bin/ggdb

    sudo ggdb ./myprog

4 votes

Notez que tuer taskgated n'a pas relancé le processus. il fallait : sudo launchctl load /System/Library/LaunchDaemons/com.apple.taskgated.plist

0 votes

Ce qui précède a redémarré taskgated - mais cela ne fonctionne toujours pas sans un redémarrage sur sierra, malheureusement.

17voto

Sam Ruberti Points 296

Le problème est que vous n'êtes pas connecté en tant qu'utilisateur Root (ce que vous ne voulez pas). Vous devez créer un certificat pour que gdb soit autorisé à accéder. Suivez ce tutoriel et vous devriez être prêt à partir...

http://sourceware.org/gdb/wiki/BuildingOnDarwin

Si tout le reste échoue, utilisez simplement : sudo gdb executableFileName

4 votes

Le tutoriel cité ici a donné les meilleurs résultats. Il fallait juste lancer codesign -s gdb-cert $(which gdb) Pour signer le gdb app.

0 votes

Juste pour confirmer pour ceux qui essaient ceci sur OSX 10.12.5, vous devez à la fois suivre les étapes décrites dans le lien BuildingOnDarwin ET exécuter gdb après être passé à l'utilisateur Root.

7voto

Hans Roggeman Points 1420

Ce lien a eu la démarche la plus claire et la plus détaillée pour faire disparaître cette erreur pour moi.

Dans mon cas, il fallait que la clé soit une clé "système", sinon cela ne fonctionnait pas (ce que toutes les url ne mentionnent pas).

Tuant également taskgated est une alternative viable (et plus rapide) au redémarrage.

J'ai aussi désinstallé MacPorts avant de commencer ce processus et j'ai désinstallé le gdb actuel en utilisant brew uninstall gdb .

0 votes

Cela a fonctionné pour moi. +1 pour la référence qui utilise brew .

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