GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puede Strace/ptrace hacer que un programa se bloquee?

Recientemente, estaba hablando de strace con alguien, y me preguntaban qué sucedería si rastreara un proceso en ejecución justo cuando estaba creando un socket de red o algo similar. ¿Podría esto causar que el programa se bloquee de forma inesperada?

Por lo que he leído sobre ptrace, la llamada al sistema utilizada por strace, no debería poder causar algo así si solo está depurando un hilo. El proceso se detiene cada vez que se llama a una llamada al sistema, pero debería reanudarse más tarde y no darse cuenta. Las señales se ponen en cola mientras no se está ejecutando, así que asumo que sucede algo similar con syscalls/sockets/listen.

¿Puede ptrace usado en el contexto de strace causar fallas extrañas en el proceso?

Respuesta aceptada:

No , strace no debería causar un bloqueo del programa –

Excepto en este caso algo inusual:

Si tiene un error que depende del tiempo de ejecución o ubicaciones de memoria en tiempo de ejecución .

Puede desencadenar este tipo de “heisenbug ” – pero muy raramente, porque este tipo de error es raro y solo necesita activarse bajo strace u otra instrumentación.
Y cuando encuentra un heisenbug, a menudo es algo bueno.

Con respecto a ptrace() – la llamada al sistema – eso es justo lo que strace hace dentro, creo, por lo que es similar. Uno puede hacer algo más que strace puede cuando se usa ptrace() directamente.

Su ejemplo sería solo este tipo de error:

En el ejemplo, strace cambiaría el tiempo de los pasos para crear una conexión de red. Si eso causa un problema, era un "problema esperando a suceder":el tiempo de ejecución cambia constantemente. Con strace , sólo un poco más. Pero cualquier otra aplicación podría haber cambiado más el tiempo, como iniciar un programa.


Linux
  1. ¿Cómo puedo iniciar un programa como root usando el administrador de ventanas?

  2. ¿Por qué no puede simplemente agregar CD Audio como un CD de datos ordinario?

  3. ¿Se puede usar mprotect() para cambiar los permisos de .rodata?

  4. ¿Por qué no puedo bloquear mi sistema con una bomba de horquilla?

  5. ¿Puede un programa decir que se está ejecutando bajo sudo?

Cómo rastrear la ejecución del programa usando el comando Strace de Linux

¿Programa Shell para simplemente abrir un controlador de caracteres y esperar?

¿Puede GDB cambiar el código ensamblador de un programa en ejecución?

¿Cómo puedo usar grep para mostrar solo nombres de archivo en Linux?

¿Cómo puedo obtener lo que ha devuelto mi función principal?

¿Qué puede causar un "Recurso temporalmente no disponible" en el comando sock send ()?