web-dev-qa-db-fra.com

gdb échoue avec l'erreur "Impossible de trouver le port de la tâche Mach pour l'identificateur de processus"

Mon application fonctionne correctement, 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 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".
116
S B

Dans Snow Leopard et les versions ultérieures de Mac OS, il ne suffit pas de coder l'exécutable gdb.

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.

53
Tyilo

Cela fonctionne quand je change pour Sudo gdb executableFileName! :)

108
Mengyuan

Vous devez créer un certificat et signer gdb:

  • Ouvrez l'application “Keychain Access” (/ Applications/Utilitaires/Keychain Access.app)
  • Ouvrir le menu/Accès au trousseau/Assistant de certification/Créer un certificat ...
  • Choisissez un nom (gdb-cert dans l'exemple), définissez «Type d'identité» sur «Racine auto-signée», définissez «Type de certificat» sur «Signature du code» et sélectionnez «Laisser moi remplacer les valeurs par défaut». Cliquez sur "Continuer" ... vous pouvez éventuellement prolonger la période prédéfinie de 365 jours à 3650 jours.
  • Cliquez plusieurs fois sur «Continuer» jusqu'à atteindre l'écran «Spécifier un emplacement pour le certificat», puis définissez le «Trousseau sur Système».
  • Si vous ne pouvez pas stocker le certificat dans le trousseau «Système», créez-le dans le trousseau «Connexion», puis exportez-le. Vous pouvez ensuite l'importer dans le trousseau «Système».
  • Dans les trousseaux, sélectionnez «Système» et vous devriez trouver votre nouveau certificat. Utilisez le menu contextuel du certificat, sélectionnez «Lire les informations», ouvrez l’élément «Confiance» et réglez «Signature du code» sur «Toujours faire confiance».
  • Vous devez quitter l'application «Keychain Access» pour pouvoir utiliser le certificat et redémarrer le service «taskgated» en supprimant le processus en cours d'exécution «taskgated». Sinon, vous pouvez redémarrer votre ordinateur.
  • Enfin, vous pouvez signer gdb:

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

    Sudo ggdb ./myprog

30
qed

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 échoue, utilisez simplement: Sudo gdb executableFileName

13
Sam Ruberti

Ce lien a eu le plus clair et le plus détaillé, étape par étape, pour que cette erreur disparaisse pour moi. 

Dans mon cas, je devais avoir la clé en tant que clé "Système", sinon cela ne fonctionnait pas (toutes les adresses URL ne le mentionnent pas). 

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

J'ai également désinstallé MacPorts avant de démarrer ce processus et désinstallé le gdb actuel à l'aide de brew uninstall gdb

6
Hans Roggeman

J'avais besoin de cette commande pour que cela fonctionne sur El Capitan:

Sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
2
Aris

Voici un guide vraiment utile qui a résolu mon problème (OSX 10.13.6).

  1. Accès au trousseau ouvert
  2. Dans le menu, ouvrez Trousseau Accès> Assistant de certificat> Créer un certificat.
  3. Donnez-lui un nom (par exemple, gdbc)
    • Type d'identité: Racine auto-signée
    • Type de certificat: Code Signing
    • Check: permettez-moi de remplacer les valeurs par défaut
  4. Continuez jusqu'à ce qu'il vous demande: "spécifiez un emplacement pour ..."
  5. Définir l'emplacement du trousseau sur Système
  6. Créer un certificat et un assistant proche.
  7. Recherchez le certificat dans les trousseaux système, faites un clic droit dessus> obtenir des informations (ou double-cliquez dessus)
  8. Développez la confiance, configurez la signature de code pour toujours faire confiance
  9. Redémarrez taskgated dans le terminal: killall taskgated
  10. Runcodesign -fs gdbc /usr/local/bin/gdbin terminal: demande le mot de passe root
1
liuyihe

Sur MacOSX, lldb doit être signé avec un code. Les versions Debug et Release sont définies pour signer le code à l'aide d'un certificat de signature de code nommé lldb_codesign. 

If you don't have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app

- In Keychain Access select the "login" keychain in the "Keychains"
  list in the upper left hand corner of the window.

- Select the following menu item:

    Keychain Access->Certificate Assistant->Create a Certificate...

- Set the following settings

    Name = lldb_codesign
    Identity Type = Self Signed Root
    Certificate Type = Code Signing

- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle

    Change:
        When using this certificate: Always Trust

- Enter your login password to confirm and make it trusted

The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.

- Option-drag the new lldb_codesign certificate from the login keychain to
  the System keychain in the Keychains pane of the main Keychain Access window
  to make a copy of this certificate in the System keychain.  You'll have to
  authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
  made there onto the desktop.
- Switch to Terminal, and run the following:

Sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer

- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
  "login", but the one in "System"), and select "Delete" to delete it from
  the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.

That should do it.

[Note: - lldb est utilisé dans mac comme gdb.]

1
Bhupesh Pant

J'ai suivi ceci tutoriel, et tout va bien.

1
ray6080

Ces instructions fonctionnent pour OSX High Sierra et évitent d’exécuter gdb en tant que root (beurk!). J'ai récemment mis à jour OSX 10.13.2 à 10.3.3. Je pense que c’est à ce moment que gdb 8.0.1 (installé avec homebrew) a commencé à échouer pour moi. 

J'ai eu du mal avec les instructions des autres. Après des instructions différentes, tout était en désordre. Alors j'ai commencé une nouvelle. J'ai plus ou moins suivi ces instructions .

Nettoyez le désordre: 

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. Dans Applications -> Utilities -> Keychain Access, j'ai supprimé tous les certificats et clés gdb précédents (assurez-vous de savoir ce que vous faites ici!). On ne sait pas si cela est nécessaire, mais comme je m'étais égaré en essayant de créer ces certificats et ces clés en utilisant d'autres instructions, je les ai quand même éliminés. J'ai eu des clés et des certificats dans la connexion et le système.

Maintenant, réinstallez gdb.

  1. brew install gdb
  2. Dans Keychain Access, allez au menu Keychain Access-> Certificate Assistant -> Create a Certificate
  3. Cochez "Permettez-moi de remplacer les valeurs par défaut" et réglez 
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing

[X] Let me override defaults
  1. Sur la page d'informations sur le premier certificat:
Serial Number : 1
Validity Period (days): 3650
  1. Sur la page 2nd Certificate Information, j’ai laissé tous les champs vides, à l’exception de ceux déjà remplis.

  2. Sur la page Informations sur la paire de clés, j'ai laissé les valeurs par défaut.

Key Size : 2048
Algorithm : RSA
  1. Sur la page Extension de l'utilisation de clé, j'ai laissé les paramètres par défaut cochés. 
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. Sur la page Extension de l'utilisation de la clé étendue, j'ai laissé les paramètres par défaut cochés.
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. Sur la page d’extension Basic Constraints, rien n’était coché (par défaut).

  2. Sur la page Sujet Autre nom, vous avez coché la case par défaut sans rien ajouter d'autre.

[X] Include Subject Alternate Name Extension
  1. Sur Spécifiez un emplacement pour la page de certificat, j'ai défini 
Keychain: System
  1. J'ai cliqué sur Créer et on m'a demandé mon mot de passe. 

  2. De retour dans l'application Keychain Access, je suis allé à System et un clic droit sur gdb-cert et sous le menu déroulant Trust, j'ai changé tous les champs en Always Trust.

  3. Ordinateur redémarré.

  4. Au terminal, j'ai exécuté codesign -s gdb-cert /usr/local/bin/gdb. J'ai entré mon mot de passe lorsque vous y êtes invité.

  5. Au terminal, j'ai couru echo "set startup-with-Shell off" >> ~/.gdbinit

  6. J'ai exécuté gdb myprogram puis start dans la console gdb. Ici, je crois, cela m’a demandé mon mot de passe. Après cela, toutes les exécutions ultérieures, il n'a pas demandé mon mot de passe.

0

C'est une approche étrange mais qui a fonctionné pour moi (MacOs HighSierra 10.13.3). Installez CLion. Il vient avec gdb. Une fois, lancez gdb en utilisant Terminal. Copiez le programme gdb dans votre répertoire/local/bin /. Pas de problème de connexion, Sudo etc.

0
Sparsh Gupta

Suivre les instructions ici Codesign gdb sur macOS semblait résoudre ce problème, pour moi, sous macOS High Sierra (10.13.3).

0
Gino