Il existe de nombreux sujets qui couvrent les problèmes de codeign avec macOS, à partir de 10.5 ..____. Ce que je voulais réaliser est de permettre à Geany de fonctionner avec le débogueur GNU (gdb). Le débogueur se trouve dans geany, mais le message d'erreur (déjà connu) est le suivant:
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))
De manière générale, il existe de nombreuses restrictions à considérer qui (devraient) autoriser l’utilisation de gdb, par exemple. gdb 8.0.1 peut fonctionner, gdb 8.1 ne fonctionnera pas du tout - voir ici , également confirmé dans Lazarus Wiki.
0) J'ai créé mon certificat "gdb-cert" en suivant les étapes décrites dans différentes instructions. Exemple ici
1) J'ai suivi les étapes de la codification du fichier exécutable gdb (source: gdb , et Stackoverflow ), qui est dans mon cas sous
/usr/local/Cellar/gdb/8.0.1/bin/gdb
(notez encore une fois, il y a des problèmes avec 8.1 pour certaines langues - Pascal aussi). Si vous voulez vous assurer que ce code est signé, optez pour
$ codesign -vvvv gdb
dans le répertoire respectif. Le mien est.
2) Assurez-vous que le certificat a bien été attribué pour être éligible à la signature de code - c'est le cas dans mon cas. On fait également confiance - ce qui est nécessaire.
3) J’ai aussi essayé l’autre façon d’exécuter gdb décrite ci-dessus, où le fichier a été édité (veuillez noter que SIP doit d'abord être désactivé lors de la récupération !!!!) Les modifications ne fonctionnent que si csrutil disable
est utilisé dans la récupération.
Sudo nano /System/Library/LaunchDaemons/com.Apple.taskgated.plist
Ce qui est dévastateur, après cette étape, l'éditeur de code no redémarrera (!!), jusqu'à ce que cette modification soit annulée (Geany, Atom, éditeur de texte, MS Visual Studio - tous brisés après l'insertion de -sp dans le fichier)
4) Dans certaines rubriques, j'ai constaté que le débogage ne fonctionnerait que si la commande csrutil enable --withouth
debug était utilisée lors de la récupération. Cela n'a rien changé.
Finalement, j'ai fini par avoir:
J'apprécierais beaucoup si quelqu'un pouvait confirmer ce comportement, une solution encore plus :)
Ceci est lié aux droits de codesign. vous devez ajouter la clé "com.Apple.security.cs.debugger" au processus de signature.
par exemple, vous devez remplacer codesign -fs gdbcert /usr/local/bin/gdb
par codesign --entitlements gdb.xml -fs gdbcert /usr/local/bin/gdb
.
le contenu de gdb.xml doit ressembler au code suivant.
<?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.debugger</key>
<true/>
</dict>
</plist>
La commande log
est utile pour résoudre les problèmes de signature de code. Voici ce que j'ai utilisé (sur Mojave):
log stream --predicate 'process == "taskgated" OR (process == "kernel" AND eventMessage CONTAINS "macOSTaskPolicy")' --info