web-dev-qa-db-fra.com

macOS Mojave: Comment obtenir des codes pour permettre le débogage (gdb)?

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:

  • un certificat pour signer le code
  • un fichier exécutable gdb qui est signé conformément à ma déclaration ci-dessus
  • un fichier com.Apple.taskgated.plist n'ayant pas renseigné l'attribut string -sp
  • J'apprécierais beaucoup si quelqu'un pouvait confirmer ce comportement, une solution encore plus :)

    8
    codeG

    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>
    
    15
    Sajjad Pourali

    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

    0
    DomQ