web-dev-qa-db-fra.com

gdb ne fonctionne pas sur macos High Sierra 10.13.3

J'ai installé gdb 8.1 avec brew. 

J'ai codesign gdb aussi et .gdbinit comme ci-dessous:

set startup-with-Shell off.

J'ai désactivé la fonction SIP:

$ csrutil status
System Integrity Protection status: disabled.

Mais gdb ne fonctionne toujours pas:

#include <iostream>
using namespace std;

int main() {
  cout << "hello world!" << endl;
  return 0;
}

Commande de compilation:

g++ -g test.cpp

sortie gdb:

GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-Apple-darwin17.3.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos Word" to search for commands related to "Word"...
Reading symbols from a.out...Reading symbols from /Users/mypc/Downloads/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) run
Starting program: /Users/mypc/Downloads/a.out 
[New Thread 0x2503 of process 802]
[New Thread 0x2303 of process 802]
During startup program terminated with signal ?, Unknown signal.
(gdb) 

Quelles étapes correctes pour que gdb fonctionne sur macos sierra?

38
lucky1928

Ceci est dû à la dernière version de gdb 8.1, la rétrogradation de gdb à 8.0.1 pourrait résoudre ce problème.

Comment rétrograder à gdb 8.0.1

  • Dissocier la gdb actuelle: brew unlink gdb
  • Installez gdb 8.0.1: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
  • Facultatif: évitez la mise à niveau de gdb avec brew pin gdb
55
Hongbo Liu

dans mon cas, le passage à la version 8.0.1 n'a pas aidé.
mais les étapes suivantes ont aidé.

(J'ai inséré l'étape 12, "vérifiez si cela fonctionne", car au lieu de redémarrer, j'ai testé gdb et tout fonctionnait bien. Je n'ai pas suivi les étapes 12+)


  1. Accès au trousseau ouvert
  2. Dans le menu, ouvrez Trousseau Accès> Assistant de certificat> Créer un certificat.
  3. Donnez-lui un nom (par exemple gdb-cert)
    • Type d'identité: Racine auto-signée
    • Type de certificat: Code Signing
    • Check: permettez-moi de remplacer les valeurs par défaut
  4. Continuez jusqu'à ce que "spécifiez un emplacement pour ..."
  5. Définir l'emplacement du trousseau sur Système
  6. Créez un certificat et fermez l'Assistant de certificat.
  7. Rechercher un certificat dans le trousseau Système.
  8. Double-cliquez sur le certificat
  9. Développez la confiance, configurez la signature de code pour toujours faire confiance
  10. Redémarrez la tâche dans le terminal: killall taskgated
  11. Codesign gdb en utilisant votre certificat: codesign -fs gdb-cert /usr/local/bin/gdb
  12. --- VÉRIFIEZ SI CELA FONCTIONNE ---
  13. Arrêtez votre Mac et redémarrez en mode de récupération (maintenez command-R jusqu'à ce que le logo Apple apparaisse)
  14. Ouvrir la fenêtre du terminal
  15. Modifiez la protection de l'intégrité du système pour autoriser le débogage: csrutil enable --without debug
  16. Redémarrez votre Mac
  17. Le débogage avec gdb devrait maintenant fonctionner comme prévu.

la source d'information:
pre Sierra: https://Gist.github.com/hlissner/898b7dfc0a3b63824a70e15cd0180154
Sierra: https://Gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d

1
GnoStiC

J'utilise macOS 10.13.6 et j'avais le même problème que "(vérifiez que gdb est signé par code - voir taskgated (8))" ...

Lorsque j'ai abaissé la GDB de la version 8.2.1 à la version 8.0.1, puis créé et signé à nouveau le gdb-cert, cela a tout simplement fonctionné.

N'oubliez pas de changer le chemin de gdb de 8.2.1 à 8.0.1 dans le débogueur d'Eclipse, redémarrez et cela fonctionnera.

0
AB007