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

7voto

Larry Song Points 471

Pour tous ceux qui utilisent Sierra 10.12.6 (et plus) et Homebrew, /usr/local/bin/gdb est un lien symbolique vers /usr/local/Cellar/gdb/8.0/bin/gdb (ou toute autre version, par exemple 8.0.1 ).

Vous devez coder à 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))

5voto

Kaituo Li Points 184

Ce n'est peut-être pas lié. Vous pouvez utiliser lldb sur macos au lieu de gdb. Vous n'avez pas besoin de ce tracas pour installer gdb.

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

4voto

andrea m. Points 308

C'est ce qui a marché pour moi à Big Sur : https://dev.to/jasonelwood/setup-gdb-on-macos-in-2020-489k . L'étape cruciale qui manquait dans les autres guides était l'option --entitlements gdb-entitlement.xml pour la signature de code :

Je copie ici le fichier gdb-entitlement.xml pour référence au cas où le site lié disparaîtrait : codesign --entitlements gdb-entitlement.xml -fs

donde <gdb-cert> est le nom du certificat et est le chemin vers l'exécutable gdb

<!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>

3voto

JnBrymn Points 5199

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

Plutôt que d'activer l'ancienne convention Tiger, Taskgated permet l'exécution de code signé. Il pourrait donc être préférable d'obtenir un certificat signé pour gdb, similaire à la convention répondre ici .

Après cela, j'ai pu sudo utiliser gdb. Si vous avez besoin d'utiliser gdb sans sudo alors peut-être que ce lien vous aidera mais, attention, je ne l'ai pas encore essayé car j'ai utilisé sudo est une solution acceptable pour le moment.

0voto

Iurii Points 1903

Je peux vous recommander de suivre ce principe : https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md

Avec des difficultés à surmonter : unknown error = -2,147,414,007 pendant la création du certificat décrite ici : https://apple.stackexchange.com/a/309123

Notes :

Chemin pour gdb installé comme homebrew devrait être quelque chose comme : /usr/local/Cellar/gdb/9.2/bin/gdb

Et csrutil enable --without debug provoquera un message sur requesting unsupported configuration comme ici : https://totalfinder.binaryage.com/system-integrity-protection

Test :

  sw_vers -productVersion
10.13.6

  gdb ./a.out
GNU gdb (GDB) 9.2
...
Thread 3 hit Breakpoint 1, main () at main.c:14
14          data_t d = {0};

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