¿Por qué GDB no puede adjuntar a la aplicación del servidor convocada con Inetd?
Pregunta
Tengo una aplicación de servidor que puede ser convocada para el cliente utilizando Inetd. Sin embargo, si intento adjuntar al proceso del servidor que se lanzó con Inetd, obtengo la siguiente respuesta: Ptrace: Operación no permitida.
gdb --annotate=3 /my/app/here <processId>
Current directory is /usr/local/bin/
GNU gdb 6.8
Copyright (C) 2008 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 "i686-pc-linux-gnu"...
Reading symbols from /usr/local/bin/flumed...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
Attaching to program: /my/app/here, process <processId>
ptrace: Operation not permitted.
/usr/local/bin/<processId>: No such file or directory.
(gdb)
Solución 2
Aparentemente, las cosas se vuelven funky con Inetd donde el IDED no es root. Terminas con un proceso con permisos extraños. Por ejemplo, no puede leer/proc/self/exe a pesar de que los permisos son 777. Sospecho que este problema es más de lo mismo. Aunque soy el ID de usuario del proceso, no tengo permisos. Usar raíz para GDB es un trabajo.
Otros consejos
La solución para mí fue esta:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Además de lo que dijo Tgoodhart, otros ptrace
A los usuarios les gusta /usr/bin/strace
también bloqueará gdb
.
También he visto que este problema ocurre cuando se ejecutan múltiples instancias de GDB al mismo tiempo, generalmente porque no pude cerrar GDB correctamente. Cerrar estas instancias filtradas solucionó el problema.
Por favor ejecute el siguiente comando para resolver su problema:
sudo chmod +s/usr/bin/gdb