macos - ¿Cómo instalar gdb(depurador) en Mac OSX El Capitan?
(8)
¿Cómo instalar gdb (depurador) en Mac OSX El Capitan? He intentado instalar gdb pero he perdido un par de veces.
Estaba siguiendo esta URL: http://ntraft.com/installing-gdb-on-os-x-mavericks/ , MAC no permite instalar MacPorts.
¿Podría alguien ayudarme en este sentido?
Aquí hay una publicación en el blog que lo explica muy bien:
http://panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/
Y la forma en que lo hago funcionar:
Cree un certificado de firma de codificación a través de KeyChain Access :
1.1 Desde el Menú, seleccione KeyChain Access> Certificate Assistant> Crear un certificado ...
1.2 Siga el asistente para crear un certificado y
gdb.cert
el nombregdb.cert
, el Tipo de identidad es Firmado por cuenta propia , y el Tipo de certificado es Firma de código y seleccione lagdb.cert
Permitir anular los valores predeterminados.1.3 Haga clic varias veces en Continuar hasta que llegue a la pantalla Especificar una ubicación para el certificado , luego configure Keychain en System .
Instala gdb a través de Homebrew:
brew install gdb
Reinicie
taskgated
:sudo killall taskgated && exit
Vuelva a abrir una ventana de Terminal y escriba
sudo codesign -vfs gdb.cert /usr/local/bin/gdb
En mi Mac OS X El Capitan, uso homebrew para instalar gdb:
brew install gdb
Luego sigo las instrucciones aquí: https://sourceware.org/gdb/wiki/BuildingOnDarwin , en la sección 2.1. Método para Mac OS X 10.5 (Leopard) y posterior .
Esto no necesariamente aborda la cuestión, pero si está utilizando Mac OS X, entonces probablemente pueda usar lldb
LLDB Homepage . Es muy similar a gdb
e incluso proporciona una guía para usar comandos que gdb
en gdb
.
Hay dos soluciones al problema, y ambas se mencionan en otras respuestas a esta pregunta y a ¿Cómo hacer que gdb funcione usando macports en OSX 10.11 El Capitan? , pero para aclarar algo de confusión aquí está mi resumen (como respuesta, ya que se hizo un poco largo para un comentario):
Qué alternativa es más segura, supongo que se reduce a la elección entre 1) confiar en los certificados autofirmados y 2) otorgar a los usuarios más privilegios.
Alternativa 1: firmar el binario
Si se utiliza la alternativa de firma, no se requiere deshabilitar SIP para agregar la opción -p a taskgated
.
Sin embargo , tenga en cuenta que con esta alternativa, la depuración solo se permite para los usuarios del grupo _developer
.
Usando codesign para firmar usando un certificado llamado gdb-cert
:
codesign -s gdb-cert /opt/local/bin/ggdb
(usando la ruta estándar de MacPorts, adopte según sea necesario)
Para obtener recetas detalladas de firma de código (incluida la creación de certificaciones), consulte: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html o https://sourceware.org/gdb/wiki/BuildingOnDarwin
Tenga en cuenta que debe reiniciar la aplicación de llavero y el servicio de tarea durante y después del proceso (la manera más fácil es reiniciar).
Alternativa 2: use la opción heredada para taskgated
Según la respuesta de @ user14241, deshabilitar SIP y agregar la opción -p a taskgated
es una opción. Tenga en cuenta que si utiliza esta opción, no es necesario firmar el binario , y también omite el diálogo para autenticarse como miembro del grupo Herramientas del desarrollador ( _developer
).
Después de agregar la opción -p (permitir grupos procmod y procview) a taskgated, también debe agregar los usuarios a los que se debe permitir usar gdb en el grupo procmod .
La receta es:
reinicie en modo de recuperación, abra un terminal y ejecute
csrutil disable
reinicie la máquina y edite
/System/Library/LaunchDaemons/com.apple.taskgated.plist
, agregando la/System/Library/LaunchDaemons/com.apple.taskgated.plist
-p
:<array> <string>/usr/libexec/taskgated</string> <string>-sp</string> </array>
reiniciar en modo de recuperación para volver a habilitar SIP (
csrutil enable
)reinicie la máquina y agregue el usuario
USERNAME
al grupoprocmod
:sudo dseditgroup -o edit -a USERNAME -t user procmod
Una alternativa que no implica agregar usuarios a grupos es hacer el archivo ejecutable setgid procmod , ya que también hace
procmod
la identificación de grupo efectiva de cualquier usuario que ejecute el setgid binary (sugerido en https://apple.stackexchange.com/a/112132 )sudo chgrp procmod /path/to/gdb sudo chmod g+s /path/to/gdb
Instale Homebrew primero:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Luego ejecuta esto: brew install gdb
Parece que MacPorts podría instalarse en El Capitán en este momento: https://www.macports.org/install.php Entonces probablemente puedas instalar gdb por el enlace que mencionaste.
Solo pasé unos días tratando de hacer que esto funcione en High Sierra 10.13.1. La versión de gdb 8.1 de homebrew no funcionaría, sin importar lo que intenté. Terminó la instalación de gdb 8.0.1 a través de macports y esto funcionó milagrosamente (después de saltar a través de todos los otros bastidores necesarios relacionados con la asignación de nombres, etc.).
Un problema adicional es que en Eclipse obtendrás comillas simples extrañas alrededor de todos los argumentos de tu programa que pueden solucionarse proporcionando los argumentos dentro de .gdbinit.
Una vez que obtenga la versión macports de gdb
instalada, deberá desactivar SIP para realizar las ediciones correctas en /System/Library/LaunchDaemons/com.apple.taskgated.plist
. Para desactivar SIP, debe reiniciar en modo de recuperación y ejecutar el siguiente comando:
csrutil disable
Luego reinicie. Luego deberá editar la parte inferior de com.apple.taskgated.plist
de la com.apple.taskgated.plist
manera:
<array>
<string>/usr/libexec/taskgated</string>
<string>-sp</string>
</array>
Luego tendrá que reiniciar para que los cambios entren en vigencia. Entonces debes volver a activar SIP. El comando gdb
para la instalación de macports es en realidad ggdb
. Deberá codificar el signo ggdb
siguiendo las instrucciones aquí:
https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html
La única forma en que pude lograr que la firma del código funcione es ejecutando ggdb
con sudo
. ¡Buena suerte!