¿Existe un equivalente de lo que hace la opción -T
y -U
de la truss
utilidad Solaris en Linux?
Esos son para especificar una llamada al sistema ( -T
) o una función de biblioteca ( -U
) que, cuando es invocada por la aplicación rastreada, hará que se detenga.
O, dicho de otro modo, me gustaría que cualquier proceso iniciado por una aplicación rastreada se detenga (como si SIGSTOP lo elimine) tan pronto como realice una llamada al sistema o una llamada a la función de biblioteca compartida.
strace
y ltrace
en Linux proporcionan gran parte del conjunto de características de Solaris truss
, pero no parecen estar haciendo eso.
Por ejemplo:
truss -f -T open cmd
Sería como, strace -f cmd
excepto que si el proceso en ejecución cmd
o alguno de sus descendientes realiza alguna open
llamada al sistema, se detendrá de inmediato (y puedo reanudarlo más adelante según mi conveniencia)
En algunos casos, podía usar los gdb
's' catch syscall
, pero estaba buscando una solución que pudiera seguir convenientemente las bifurcaciones y continuar haciéndolo para todos los procesos bifurcados y seguir haciéndolo incluso después de execve
s.
Parece recordar alguna utilidad que ofrece la misma funcionalidad, incluso una (u opciones para esa misma utilidad) para aplicaciones de un solo paso entre algunas ocurrencias de alguna llamada de sistema remotamente así, pero mi memoria me está fallando, ni siquiera puedo estar seguro eso fue en Linux.
follow-exec-mode
), estoy experimentando con eso. No responde estrictamente la pregunta, pero puede ser lo suficientemente bueno para lo que necesito.truss
manual de Solaris .Respuestas:
Que yo sepa, esto no se puede hacer con
strace
laptrace
función que se usa internamenteSIGSTOP
oSIGINT
con llamadas.EDITAR:
Inserté esta solución simple en ministrace , por lo que no se requiere codificación.
Mi solución propuesta, si no se requiere toda la funcionalidad de strace, sería modificar el ministrace, que encontré aquí Escríbete un strace en 70 líneas de código .
En un programa de un solo disparo, puede agregar dos líneas antes del siguiente código:
Pseudocódigo:
No he probado nada de esto, te dejo estos pasos finales.
fuente
Systemtap debería poder hacer lo que está buscando, es una buena guía para ello:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
fuente