macos gdb

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:

  1. 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 nombre gdb.cert , el Tipo de identidad es Firmado por cuenta propia , y el Tipo de certificado es Firma de código y seleccione la gdb.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 .

  2. Instala gdb a través de Homebrew: brew install gdb

  3. Reinicie taskgated : sudo killall taskgated && exit

  4. Vuelva a abrir una ventana de Terminal y escriba sudo codesign -vfs gdb.cert /usr/local/bin/gdb



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:

  1. reinicie en modo de recuperación, abra un terminal y ejecute csrutil disable

  2. 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>

  3. reiniciar en modo de recuperación para volver a habilitar SIP ( csrutil enable )

  4. reinicie la máquina y agregue el usuario USERNAME al grupo procmod :

    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!