127 votes

"Veuillez vérifier que gdb est signé par un code - voir taskgated(8)". - Comment obtenir l'installation de gdb avec le code signé de homebrew ?

Je suis sous osx 10.8.4 et j'ai installé gdb 7.5.1 avec homebrew (motivation obtenir un nouveau gdb avec de nouvelles fonctionnalités comme --with-python etc... )

Pour faire court, lorsque je lance le débogage dans un projet Eclipse c++, j'obtiens :

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 du code

C'est ce que j'ai fait :

  1. Configurer le certificat
  2. Signer la gdb -> codesign -s gdb-cert /usr/local/bin/gdb

Lorsque je relance le débogage dans Eclipse, j'obtiens la même erreur que ci-dessus "(please check gdb is codesigned - see 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 fonctionne comme prévu.

Existe-t-il des solutions ou des conseils ?

Thx

Pelle

154voto

maximser Points 1656

Cette erreur se produit parce qu'OSX met en œuvre une politique d'accès aux pids qui exige une signature numérique pour que les binaires puissent accéder aux pids d'autres processus. Pour permettre à gdb d'accéder à d'autres processus, nous devons d'abord signer le code du binaire. 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 Keychain Access -> Certificate Assistant -> Create a Certificate

Choisissez un nom pour le certificat (par exemple, gdb-cert), définissez le type d'identité sur Auto Signed Root, définissez le type de certificat sur Code Signing et sélectionnez l'option Let me override defaults. Cliquez plusieurs fois sur Continue jusqu'à ce que vous arriviez à l'écran Specify a Location For The Certificate, puis définissez Keychain sur System.

Double-cliquez sur le certificat, ouvrez la section Trust, et définissez la signature de code sur Always Trust. Quittez l'application Keychain Access.

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/

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

Utilisez gdb 7.12.1 ou plus récent. 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 appelé .gdbinit dans votre répertoire personnel, auquel cas elle sera appliquée automatiquement à chaque fois que vous démarrez gdb.

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

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

66voto

Johnny Thunderman Points 646

Je suis passé à gdb 8.3 et je n'arrivais pas à faire fonctionner les choses. Ceci m'a aidé :

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

Lorsque le 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/

Note : Sans le droit, j'ai pu exécuter gdb seulement avec sudo .

29voto

klm123 Points 3001

J'ai fait fonctionner gdb sur OSX 10.9 sans codesigning de cette façon (décrit aquí ) :

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

  2. sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist

    changer la chaîne d'option de -s a -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 ggdb commande. Ou faites un alias dans votre fichier de configuration :

alias gdb='ggdb'

et utiliser la commande 'gdb' ensuite.

28voto

mickster99 Points 299

J'ai rencontré le même problème avec GDB. Je fonctionne sous Mac OS X 10.8.5 alias Mountain Lion. J'utilise la version de 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 je saisis la commande gdb sample.out j'obtiens 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 toutefois un faux-fuyant.

La solution que j'ai trouvée et qui a fonctionné pour moi a été de simplement invoquer GDB en utilisant l'accès du super-utilisateur :

sudo gdb sample.out. 

Cela fonctionne bien pour moi.

Et qu'à partir de là, je pouvais exécuter GDB example.out sans utiliser sudo.

J'espère que cela aidera et fonctionnera pour d'autres. RSVP si ce n'est pas le cas.

9voto

Taras Matsyk Points 1805

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

  1. Créer un certificat pour signer la gdb.

Malheureusement, le certificat du système m'a donné Unknown Error = -2,147,414,007 qui est très utile, j'ai donc dû trouver une solution de rechange. Keychain Access -> Create certificate ->

Choisissez login , gdb-cert , Code Signing

Copier/déplacer le certificat dans le trousseau du système (entrer le mot de passe)

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

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

N'oubliez pas la configuration : echo "set startup-with-shell off" >>~/.gdbinit

  1. Activer l'utilisateur racine

Aller à 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 root (étape 4)
  2. Redémarrez si cela ne fonctionne toujours pas. (si rien d'autre ne fonctionne, il est probable que cela fonctionne déjà).

PS. J'ai fini par utiliser lldb parce que ça marche tout simplement ( tutoriel )

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