Comment obtenir un" codesigned " gdb sur OSX?
parce que j'ai besoin d'une version Python gdb
, j'ai installé une autre version via
brew tap homebrew/dupes
brew install gdb
je veux utiliser ce gdb
avec Eclipse CDT, où j'ai entré le chemin vers le binaire dans les paramètres de débogage. Cependant, le lancement d'un programme de débogage échoue avec le message suivant:
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 39847: (os/kern) failure (0x5).n (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).n (please check gdb is codesigned - see taskgated(8))
que signifie" codesigned " dans ce contexte? Comment puis-je faire fonctionner ce gdb
?
7 réponses
il semblerait que vous ayez besoin de signer l'exécutable. Voir ces liens pour plus d'informations. Vous devriez pouvoir vous en tirer avec l'auto-signature si vous ne prévoyez pas de redistribuer cette version de gdb
.
vous pouvez également désactiver la signature de code sur votre système, bien que cela présente un risque pour la sécurité. Pour ce faire, essayez d'exécuter sudo spctl --master-disable
dans le Terminal.
I. 1 Codesigning the Debugger
le noyau Darwin exige que le débogueur ait des permissions spéciales avant d'être autorisé à contrôler d'autres processus. Ces autorisations sont accordé en codésignant l'exécutable GDB. Sans ces autorisations, le débogueur signalera des messages d'erreur tels que:
Starting program: /x/y/foo Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))
Codesigning exige un certificat. La procédure suivante explique comment créer un:
- Démarrer l'application Trousseau d'Accès (dans /Applications/Utilitaires/Trousseau d'Accès.app)
- sélectionnez le porte-clés Accès - > Assistant de certificat - > créer un certificat... menu
- alors:
- choisir un nom pour le nouveau certificat (cette procédure utilisera "gdb-cert "comme exemple)
- mettre "Type D'identité" à "racine Auto-signée"
- mettre "Type de certificat" à "signature de Code "
- activer l'option "Laissez-moi outrepasser par défaut
- Cliquez plusieurs fois sur "Continuer" jusqu'à ce que le "spécifier un emplacement pour le certificat "écran apparaît, puis mettre "Porte-Clés" à "système "
- cliquez sur" Continuer " jusqu'à ce que le certificat soit créé
- Enfin, dans la vue, double-cliquez sur le nouveau certificat, "Lors de l'utilisation de ce certificat", "Toujours faire Confiance"
- Quitter l'application Trousseau d'Accès et de redémarrer l'ordinateur (ce qui est malheureusement nécessaire)
une fois qu'un certificat a été créé, le débogueur peut être codé comme suit: suivre. Dans un Terminal, exécutez la commande suivante...
codesign -f -s "gdb-cert" <gnat_install_prefix>/bin/gdb
... où "gdb-cert" doit être remplacé par le nom de certificat choisis ci-dessus, et devrait être remplacé par le emplacement où vous avez installé GNAT.
source: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html
mise à JOUR: High Sierra (Certificat d'Assistant - Erreur Inconnue) https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist
j'ai fait travailler gdb sur OSX 10.9 sans codesigner de cette façon (décrit ici ):
-
installez gdb avec macports. (peut-être Pouvez-vous le sauter)
-
sudo nano/System/Library/LaunchDaemons / com.Apple.taskgated.plist
changer la chaîne d'options de
-s
à-sp
à la ligne 22, col 27. -
redémarre l'ordinateur.
-
Utiliser gdb
c'est un sujet très ancien, mais j'ajoute une réponse, parce que parmi les nombreuses instructions disponibles, une seule contenait juste les bonnes étapes pour faire fonctionner un débogueur auto-signé.
vous devez créer un certificat racine auto-signé et ensuite signer l'exécutable gdb avec lui, mais beaucoup de gens se sont plaints que cela n'a pas fonctionné pour eux. Ni l'un ni l'autre ne l'a fait pour moi jusqu'à ce que je suis tombé sur ce lien .
le point clé manquant dans d'autres Manuels est que vous devez redémarrer votre ordinateur pour que les changements prennent effet. Une fois que j'ai fait ça, tout a fonctionné comme prévu.
j'espère que cela aidera les autres.
vérifier la confiance du cert, il doit être fiable pour la signature de code (sur yosemite qui est la troisième dernière dans la section confiance de la vue cert dans l'accès porte-clés).
au début, le cert n'était pas connu pour coder le porte-clés, parce qu'il y avait le but de L'Extension "signature de Code" manquant, vous pouvez le trouver si vous regardez dans le porte-clés et double-cliquez sur le certificat:
j'ai fixé que:
puis j'ai ajouté le certificat aux certificats de signature de confiance, après avoir fait glisser et laissé tomber le certificat du porte-clés à mon bureau, qui a créé le ~/Desktop/gdb-cert.cer:
$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
C'était un peu délicat parce que j'ai été induit en erreur par certains messages internet et que je n'ai pas regardé la page de manuel. Quelque dit que vous devez utiliser add-trust ( ) https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Le plus terrible, c'est que la commande a réussi, mais n'a pas fait ce qu'elle "devrait" (bien, c'était la mauvaise commande, mais elle aurait dû me dire que c'était mal).
après que j'ai trouvé le nouveau cert dans les certs de confiance comme cela:
$ security find-identity -p codesigning
Policy: Code Signing
Matching identities
1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)" (CSSMERR_TP_CERT_EXPIRED)
2) ACD43B6... "gdb-cert"
2 identities found
Valid identities only
1) ACD43... "gdb-cert"
1 valid identities found
dans mon cas le apple cert est expiré, mais celui que j'utilisais pour signer gdb n'était pas (eh bien, je viens de créer moi-même). Sachez également que la politique est nommé différemment pour la "sécurité add-confiance-cert"(-p codeSign) et la "sécurité de trouver l'identité de la commande" (- p codesigning). J'ai ensuite signé gdb et j'ai aussi toujours eu:
$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
gdb-cert.cer: no identity found
parce que j'avais l'impression que je devais donner le nom du fichier cert à l'option --sign, mais qu'en fait C'était la CN du certificat que j'aurais dû fournir et que je devrais être en fiducie stocker. Vous pouvez trouver le CN ici en double cliquant sur le cert dans le porte-clés:
ou au-dessus de la sortie de "sécurité trouver-identité-p codesigning". Puis je suis allé signer et j'ai dû lui donner le bon porte-clés:
codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`
j'ai dû entrer le mot de passe root pour permettre l'accès au porte-clés.
qui m'a ensuite donné un gdb de travail et il devrait vous donner une demande signée.
j'ai fini par avoir à suivre ces directions au lieu des directions suggérées par les autres.
Je ne sais toujours pas si c'est l'acte de killall taskgated
ou le processus d'activation de l'utilisateur root qui a fait la différence.
certains ont dit qu'un redémarrage est nécessaire. Je conclus qu'avec les instructions ci-dessus, ce n'est peut-être pas le cas.
j'ai aussi fait le changement recommandé par @klm123, donc en mai ont également contribué.
notez que j'utilise homebrew, pas macports.
si l'utilisation de gdb
n'est pas une exigence difficile, vous pouvez également utiliser lldb
comme une alternative. Il est déjà sur votre système et n'a pas besoin d'être signé de code:
$ lldb stddev_bugged
(lldb) target create "stddev_bugged"
Current executable set to 'stddev_bugged' (x86_64).
(lldb) b mean_and_var
Breakpoint 1: where = stddev_bugged`mean_and_var + 17 at stddev_bugged.c:17, address = 0x0000000100000b11
(lldb) r
Process 1621 launched: '/Users/richardschneeman/Documents/projects/21stCentury/02/example-00/stddev_bugged' (x86_64)
Process 1621 stopped
* thread #1: tid = 0xc777, 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17
14 typedef struct meanvar {double mean, var;} meanvar;
15
16 meanvar mean_and_var(const double *data){
-> 17 long double avg = 0,
18 avg2 = 0;
19 long double ratio;
20 size_t count= 0;
(lldb)
Voici une table convertissant gdb
en lldb
commandes http://lldb.llvm.org/lldb-gdb.html