macos - gdb falla con el error "No se puede encontrar el puerto de la tarea Mach para el identificador del proceso"
(11)
¡Funciona cuando cambio a sudo gdb executableFileName
! :)
Mi aplicación funciona bien pero gdb no puede depurarla con el siguiente error
(gdb) run
Starting program: /path/to/app
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).
Estoy en OS X Lion. La versión GDB es
$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".
El problema es que no ha iniciado sesión como usuario raíz (que no desea). Debe crear un certificado para que gdb tenga acceso permitido. Sigue este tutorial y deberías ser bueno para ir ...
http://sourceware.org/gdb/wiki/BuildingOnDarwin
Si todo lo demás falla, simplemente use: sudo gdb executableFileName
En MacOSX lldb necesita ser código firmado. Las compilaciones Debug and Release se configuran con el signo de código mediante un certificado de firma de código denominado lldb_codesign.
If you don''t have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app
- In Keychain Access select the "login" keychain in the "Keychains"
list in the upper left hand corner of the window.
- Select the following menu item:
Keychain Access->Certificate Assistant->Create a Certificate...
- Set the following settings
Name = lldb_codesign
Identity Type = Self Signed Root
Certificate Type = Code Signing
- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle
Change:
When using this certificate: Always Trust
- Enter your login password to confirm and make it trusted
The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.
- Option-drag the new lldb_codesign certificate from the login keychain to
the System keychain in the Keychains pane of the main Keychain Access window
to make a copy of this certificate in the System keychain. You''ll have to
authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
made there onto the desktop.
- Switch to Terminal, and run the following:
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer
- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
"login", but the one in "System"), and select "Delete" to delete it from
the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.
That should do it.
[Nota: - lldb se usa en mac como gdb.]
En las versiones de Snow Leopard y versiones posteriores de Mac OS, no es suficiente codificar el ejecutable gdb
.
Debe seguir esta guía para que funcione: http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt
La guía explica cómo hacerlo para lldb
, pero el proceso es exactamente el mismo para gdb
.
Estas instrucciones funcionan para OSX High Sierra y evitan ejecutar gdb como root (yuck!). Recientemente actualicé desde OSX 10.13.2 a 10.3.3. Creo que esto es cuando gdb 8.0.1 (w / homebrew instalado) comenzó a fallar para mí.
Tuve dificultades con las instrucciones de otras personas. Después de diferentes instrucciones, todo fue un desastre. Entonces comencé un nuevo. Yo más o menos seguí estas sourceware.org/gdb/wiki/BuildingOnDarwin .
Limpia el desastre:
-
brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
- En
Applications
->Utilities
->Keychain Access
, eliminé todos los certificados y claves anteriores de gdb (¡asegúrese de saber qué está haciendo aquí!). No está claro si esto es necesario, pero como me había molestado tratando de crear esos certificados y claves usando otras instrucciones, los eliminé de todos modos. Tenía claves y certificados tanto en el inicio de sesión como en el sistema.
Ahora reinstala gdb.
-
brew install gdb
- Dentro del
Keychain Access
, vaya al menúKeychain Access
->Certificate Assistant
->Create a Certificate
- Marque "Permitirme anular los valores predeterminados" y configure
Name : gdb-cert Identity Type: Self Signed Root Certificate Type : Code Signing [X] Let me override defaults
- En la 1ª página de información del certificado:
Serial Number : 1 Validity Period (days): 3650
En la segunda página de información del certificado, dejé todos los campos en blanco, excepto los que ya estaban completados.
En la página de información de par de claves, dejé los valores predeterminados
Key Size : 2048 Algorithm : RSA
- En la página de extensión de uso de la clave, dejé los valores predeterminados marcados.
[X] Include Key Usage Extension [X] This extension is critical Capabilities: [X] Signature
- En la página Extensión de uso de clave extendida, dejé los valores predeterminados marcados.
[X] Include Extended Key Usage Extension [X] This extension is critical Capabilities: [X] Code Signing
En la página de extensión de restricciones básicas, no se verificó nada (predeterminado).
En la página de Extensión de nombre alternativo del sujeto, dejé el valor predeterminado marcado y no agregué nada más.
[X] Include Subject Alternate Name Extension
- En Especifique una ubicación para la página del certificado, configuro
Keychain: System
Hice clic en Crear y se me solicitó mi contraseña.
De vuelta en la aplicación
Keychain Access
, fui aSystem
y hice clic derecho engdb-cert
y en el menú desplegableTrust
, cambié todos los campos aAlways Trust
.Computadora reiniciada
En la Terminal, ejecuté
codesign -s gdb-cert /usr/local/bin/gdb
. Ingresé mi contraseña cuando se me solicitó.En la Terminal, ejecuté
echo "set startup-with-shell off" >> ~/.gdbinit
gdb myprogram
y luegogdb myprogram
dentro de la consola de gdb. Aquí, creo, me pidió mi contraseña. Después de eso, en todas las ejecuciones posteriores, no solicitó mi contraseña.
Este es un enfoque extraño, pero funcionó para mí (MacOs HighSierra 10.13.3). Instala CLion. Viene con gdb. Una vez ejecutado el gdb usando Terminal. Copie el programa gdb a su usr / local / bin /. No hay problema de iniciar sesión, sudo, etc.
Necesita crear un certificado y firmar gdb:
- Abrir la aplicación "Acceso a Llaveros" (/ Aplicaciones / Utilidades / Acceso a Llaves.app)
- Abrir menú / Acceso a llavero / Asistente de certificado / Crear un certificado ...
- Elija un nombre (gdb-cert en el ejemplo), establezca "Tipo de identidad" en "Raíz autofirmada", establezca "Tipo de certificado" en "Firma de código" y seleccione "Permitir anular los valores predeterminados". Haga clic en "Continuar". Es posible que desee extender el período predefinido de 365 días a 3650 días.
- Haga clic varias veces en "Continuar" hasta llegar a la pantalla "Especificar una ubicación para el certificado", luego configure "Llavero en el sistema".
- Si no puede almacenar el certificado en el llavero "Sistema", créelo en el llavero de "inicio de sesión" y luego expórtelo. A continuación, puede importarlo en el llavero "Sistema".
- En los llaveros, seleccione "Sistema", y debería encontrar su nuevo certificado. Use el menú contextual para el certificado, seleccione "Obtener información", abra el elemento "Confianza" y configure "Firma de código" en "Confiar siempre".
- Debe salir de la aplicación "Acceso a Llaveros" para usar el certificado y reiniciar el servicio "taskgated" eliminando el proceso actual "taskgated" en ejecución. Alternativamente puede reiniciar su computadora.
Finalmente puedes firmar gdb:
sudo codesign -s gdb-cert /usr/local/bin/ggdb
sudo ggdb ./myprog
Necesitaba este comando para hacerlo funcionar en El Capitán:
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
Seguí this tutorial, y todo está bien.
Siguiendo las instrucciones aquí, Codesign gdb en macOS pareció resolver este problema, para mí, en macOS High Sierra (10.13.3).
Este enlace tuvo el paso más claro y detallado para hacer desaparecer este error.
En mi caso, tuve que tener la clave como clave "Sistema", de lo contrario no funcionó (lo que no todas las URL mencionan).
También matar a taskgated
es una alternativa viable (y más rápida) a tener que reiniciar.
También desinstalé MacPorts antes de comenzar este proceso y desinstalé el gdb actual utilizando brew uninstall gdb
.