Estoy bajo osx 10.8.4 y he instalado gdb 7.5.1 con homebrew (la motivación es obtener un nuevo gdb con nuevas características como --with-python, etc.)
En pocas palabras, cuando ejecuto la depuración dentro de un proyecto de C ++ Eclipse, obtengo:
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
He seguido varias sugerencias para la firma de código.
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- parcialmente http://www.noktec.be/archives/1251 con varios ajustes
Así que lo hice:
- Configurar el certificado
- Firme el gdb -> codesign -s gdb-cert / usr / local / bin / gdb
Cuando vuelvo a ejecutar la depuración en Eclipse, aparece el mismo error que el anterior "(compruebe que gdb esté codificado; consulte taskgated (8))".
Si configuro el gdb al gdb anterior (en las preferencias de gdb de Eclipse) / usr / libexec / gdb / gdb-i386-apple-darwin, la depuración se ejecuta como se esperaba.
¿Alguna solución / sugerencia por ahí?
Gracias
Pelle
Respuestas:
Este error ocurre porque OSX implementa una política de acceso pid que requiere una firma digital para que los binarios accedan a otros procesos pids. Para habilitar el acceso de gdb a otros procesos, primero debemos firmar el código binario. Esta firma depende de un certificado en particular, que el usuario debe crear y registrarse en el sistema.
Para crear un certificado de firma de código, abra la aplicación Keychain Access. Elija el menú Acceso a llaveros -> Asistente de certificados -> Crear un certificado ...
Elija un nombre para el certificado (por ejemplo, gdb-cert), establezca el Tipo de identidad en Raíz autofirmado, establezca el Tipo de certificado en Firma de código y seleccione Permítame anular los valores predeterminados. Haga clic varias veces en Continuar hasta llegar a la pantalla Especificar una ubicación para el certificado, luego configure Llavero en Sistema.
Haga doble clic en el certificado, abra la sección Confianza y configure Firma de código en Confiar siempre. Salga de la aplicación Keychain Access.
Reinicie el servicio asignado a tareas y firme el binario.
fuente http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
En macOS 10.12 (Sierra) y posteriores, también debe
Use gdb 7.12.1 o posterior Además, evite que gdb use un shell para iniciar el programa a depurar. Puede usar el siguiente comando para esto dentro de gdb:
También puede poner este último comando en un archivo llamado .gdbinit en su directorio de inicio, en cuyo caso se aplicará automáticamente cada vez que inicie gdb
FUENTE: https://sourceware.org/gdb/wiki/BuildingOnDarwin
fuente
macOS Sierra
con certificados autofirmados.sudo killall taskgated
es la clave para resolver mi problemaHice que gdb funcionara en OSX 10.9 sin codificar de esta manera (descrito aquí ):
Instale gdb con macports. (puede ser que puedas omitirlo)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
cambie la cadena de opciones de
-s
a-sp
en la línea 22, col 27.Reinicia la computadora.
Utilice gdb. Si lo instaló con puertos mac, debe usar el
ggdb
comando. O hizo un alias en su archivo de configuración:alias gdb='ggdb'
y use el comando 'gdb' entonces.
fuente
gdb
comosudo
. Eso parece un riesgo de seguridad innecesario.Actualicé
gdb 8.3
y no pude hacer que las cosas funcionaran. Esto me ayudó:Donde el contenido de
gdb.xml
es:Encontré esta solución aquí: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
Nota: Sin el derecho,
gdb
solo pude ejecutarsudo
.fuente
error: The specified item could not be found in the keychain.
Experimenté el mismo problema con GDB. Estoy corriendo bajo el
Mac OS X 10.8.5
también conocido como Mountain Lion. Estoy usando la versión GDB7.7.1
.Compilé mi programa de prueba con el siguiente comando:
Si ingresé el comando
gdb sample.out
, obtengo el mismo mensaje de error críptico:Sin embargo, este mensaje de error es una pista falsa.
La solución que encontré que funcionó para mí fue simplemente invocar GDB usando la cuenta de superusuario:
Eso funciona bien para mí.
Y que desde ese punto pude ejecutar GDB example.out sin usar sudo.
Espero que esto ayude y funcione para otros. RSVP si no lo hace.
fuente
Nada de esto funcionó para mí y tuve que ir con una carrera larga. Aquí hay una lista completa de los pasos que he realizado para que funcione.
Desafortunadamente, el certificado del sistema me dio, lo
Unknown Error = -2,147,414,007
cual es muy útil, así que tuve que buscar una solución.KeyChain Assistant -> Create certificate ->
Recoger
login
,gdb-cert
,Code Signing
Copie / mueva el certificado al llavero del sistema (ingrese la contraseña)
gdb-cert
) haga clic enGet info
->Trust Always
startup-with-shell
Entrar en consola:
set startup-with-shell off
Recuerde la configuración:
echo "set startup-with-shell off" >> ~/. gdbinit
Vaya a
System Preferences
->Users & Groups
->Unlock it
->Login Options
->Network Account Server
->Join
->Unlock it
->Edit
(menú) ->Enable Root User
sudo killall taskgated
codesign -fs gdb-cert "$(which gdb)"
PD. Termino usando
lldb
porque simplemente funciona ( tutorial )fuente
Para cualquiera que use Sierra 10.12.6 (y superior) y Homebrew,
/usr/local/bin/gdb
hay un enlace simbólico a/usr/local/Cellar/gdb/8.0/bin/gdb
(o cualquier versión, por ejemplo8.0.1
).Debe codificar tanto el enlace como el destino:
O, si tiene
greadlink
(instalado a través debrew install coreutils
):fuente
Me pregunto si el cambio global en la respuesta más votada aquí tiene algunas consecuencias no deseadas.
En lugar de habilitar la antigua convención de Tiger, taskgated permite ejecutar código firmado. Por lo tanto, podría ser mejor obtener un certificado firmado para gdb, similar a la respuesta aquí .
Después de esto, pude
sudo
usar gdb. Si necesitas usar gdb sin sudo, entonces quizás este enlace te ayude , descargo de responsabilidad, todavía no lo he probado porque usarlosudo
es una buena solución por ahora.fuente
Esto puede no estar relacionado. Puede usar lldb en macos en lugar de gdb. No necesita esta molestia para instalar gdb.
lldb ( http://lldb.llvm.org ) ya está instalado por defecto en High Sierra
fuente
Puedo recomendar seguir esta esencia: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md
Con truco para superar:
unknown error = -2,147,414,007
durante la creación del certificado que se describe aquí: https://apple.stackexchange.com/a/309123Notas:
La ruta para gdb instalado como
homebrew
paquete debería ser algo como:/usr/local/Cellar/gdb/9.2/bin/gdb
Y
csrutil enable --without debug
provocará un mensaje sobrerequesting unsupported configuration
, como aquí: https://totalfinder.binaryage.com/system-integrity-protectionPrueba:
fuente
gdb 8,3;
Mi problema es el mismo que el del chico de arriba, resuelto por
fuente