web-dev-qa-db-fra.com

"Veuillez vérifier que gdb est signé par code - voir taskgated (8)" - Comment faire pour que gdb soit installé avec le code homebrew signé?

Je suis sous osx 10.8.4 et ai installé gdb 7.5.1 avec homebrew (motivation, obtenez un nouveau gdb avec de nouvelles fonctionnalités telles que --with-python etc ...)

En bref, lorsque je lance le débogage dans un projet c ++ Eclipse, je reçois:

Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

J'ai suivi diverses suggestions pour la signature de code

Alors j'ai fait:

  1. Mettre en place le certificat
  2. Signer le gdb -> codesign -s gdb-cert/usr/local/bin/gdb

Lorsque j'exécute à nouveau le débogage dans Eclipse, le message d'erreur ci-dessus s'affiche "(vérifiez que gdb est signé par code - voir taskgated (8))".

Si je remets la gdb à l'ancienne gdb (dans les préférences gdb d'Eclipse)/usr/libexec/gdb/gdb-i386-Apple-darwin, le débogage se déroule comme prévu.

Des solutions/conseils là-bas?

THX

Pelle

86
pellekrogholt

Cette erreur se produit car OSX implémente une politique d'accès pid qui requiert une signature numérique pour que les fichiers binaires accèdent à d'autres pid de processus. Pour permettre à gdb d'accéder à d'autres processus, nous devons d'abord signer le binaire en code. Cette signature dépend d'un certificat particulier que l'utilisateur doit créer et enregistrer auprès du système.

Pour créer un certificat de signature de code, ouvrez l'application Keychain Access. Choisissez le menu Accès au trousseau -> Assistant de certificat -> Créer un certificat…

Choisissez un nom pour le certificat (par exemple, gdb-cert), définissez Type d'identité sur Racine auto-signée, définissez Type de certificat sur Signature du code et sélectionnez les options Laisser moi remplacer les valeurs par défaut. Cliquez plusieurs fois sur Continuer jusqu'à atteindre l'écran Spécifier un emplacement pour le certificat, puis définissez le Trousseau sur Système.

Double-cliquez sur le certificat, ouvrez la section Confiance et définissez la signature de code sur Toujours confiance. Quittez l'application Trousseau d'accès.

Redémarrez le service taskgated et signez le binaire.

$ Sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"

source http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/

Sur macOS 10.12 (Sierra) et les versions ultérieures, vous devez également

Utiliser gdb 7.12.1 ou version ultérieure Empêchez en outre gdb d'utiliser un shell pour démarrer le programme à déboguer. Vous pouvez utiliser la commande suivante pour cela dans gdb:

set startup-with-Shell off

Vous pouvez également placer cette dernière commande dans un fichier nommé .gdbinit de votre répertoire personnel. Dans ce cas, elle sera automatiquement appliquée à chaque démarrage de gdb.

echo "set startup-with-Shell off" >> ~/.gdbinit

SOURCE: https://sourceware.org/gdb/wiki/BuildingOnDarwin

125
maximser

J'ai fait fonctionner gdb sur OSX 10.9 sans utiliser le code de cette manière (comme décrit ici ):

  1. Installez gdb avec macports. (peut être vous pouvez le sauter)

  2. Sudo nano /System/Library/LaunchDaemons/com.Apple.taskgated.plist

    changer la chaîne d'option de -s à -sp à la ligne 22, col 27.

  3. redémarrez l'ordinateur.

  4. Utilisez gdb. Si vous l'avez installé avec les ports Mac, vous devez utiliser la commande 'ggdb'. Ou faites un alias dans votre fichier de configuration:

alias gdb = 'ggdb'

et utilisez la commande 'gdb' alors.

30
klm123

J'ai rencontré le même problème avec GDB. Je cours sous Mac OS X 10.8.5 alias Mountain Lion. J'utilise la version GDB 7.7.1.

J'ai compilé mon programme de test avec la commande suivante:

g++ -o gdb-sample.out -g gdb-sample.cpp    

Si j'ai entré la commande gdb sample.out, Je reçois le même message d'erreur cryptique:

"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"

Ce message d'erreur est cependant un fouillis rouge.

La solution que j'ai trouvée qui fonctionnait pour moi était tout simplement d'invoquer GDB à l'aide du superutilisateur acct:

Sudo gdb sample.out. 

Cela fonctionne bien pour moi.

Et à partir de là, je pourrais lancer GDB example.out sans utiliser Sudo.

J'espère que cela aide et fonctionne pour les autres. RSVP si ce n'est pas.

24
mickster99

Pour ceux qui utilisent Sierra 10.12.6 (et versions supérieures) et Homebrew, /usr/local/bin/gdb est un lien symbolique vers /usr/local/Cellar/gdb/8.0/bin/gdb _ (ou toute version, par exemple 8.0.1).

Vous devez codifier à la fois le lien et la cible:

codesign -fs gdb-cert /usr/local/bin/gdb
codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"

Ou, si vous avez greadlink (installé via brew install coreutils):

codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
4
Larry Song

Rien de tout cela n'a fonctionné pour moi et j'ai dû partir avec une longue course. Voici une liste complète des étapes que j'ai suivies pour le faire fonctionner.

  1. Créez un certificat pour signer le gdb.

Malheureusement, le certificat système m'a donné Unknown Error = -2,147,414,007, Ce qui est très utile. J'ai donc dû contourner le problème. KeyChain Assistant -> Create certificate ->

Choisissez login, gdb-cert, Code Signing

Copier/déplacer le certificat dans le trousseau Système (entrez le mot de passe)

  1. Sélectionnez le certificat (gdb-cert) Cliquez sur Get info -> Trust Always
  2. Désactiver startup-with-Shell

Entrez dans la console: set startup-with-Shell off

Rappelez-vous la configuration: echo "set startup-with-Shell off" >> ~/. gdbinit

  1. Activer l'utilisateur racine

Allez à System Preferences -> Users & Groups -> Unlock it -> Login Options -> Network Account Server -> Join -> Unlock it -> Edit (menu) -> Enable Root User

  1. Sudo killall taskgated
  2. Enfin signez gdb

codesign -fs gdb-cert "$(which gdb)"

  1. Désactiver l'utilisateur racine (étape 4)
  2. Redémarrez si ne fonctionne toujours pas. (Si rien d'autre ne fonctionne, très probablement cela fonctionne déjà)

PS Je finis par utiliser lldb parce que cela fonctionne ( tutorial )

4
Taras Matsyk

Je me demande si le changement global dans le réponse la plus votée ici a des conséquences inattendues.

Plutôt que d'activer l'ancienne convention Tiger, taskgated permet au code signé de s'exécuter. Il serait donc peut-être préférable d’obtenir un certificat signé pour gdb, semblable au réponse ici .

Après cela, j’ai pu utiliser Sudo et gdb. Si vous devez utiliser gdb sans Sudo, alors peut-être que ce lien vous aidera bien que, je ne l’ai pas encore fait, car utiliser Sudo est une solution satisfaisante pour l’heure ".

2
JnBrymn

Je suis passé à gdb 8.3 et n'a pas été capable de faire fonctionner les choses. Cela m'a aidé:

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb

Où contenu de gdb.xml est:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.Apple.security.cs.allow-jit</key>
    <true/>
    <key>com.Apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.Apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.Apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.Apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.Apple.security.cs.debugger</key>
    <true/>
    <key>com.Apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

J'ai trouvé cette solution ici: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/

Remarque: Sans ce droit, je ne pouvais exécuter gdb qu'avec Sudo.

1
Johnny Thunderman

gdb 8,3;

Mon problème est le même que celui du type ci-dessus, résolu par

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
0
C.J

Cela peut ne pas être lié. Vous pouvez utiliser lldb sur macos au lieu de gdb. Vous n'avez pas besoin de ce souci pour installer gdb.

lldb ( http://lldb.llvm.org ) est déjà installé par défaut dans High Sierra

0
Kaituo Li