Strace es una utilidad CLI que sirve la para comprobación de errores en el sistema ya que permite vigilar las llamadas al sistema usadas por un determinado programa y todas las señales que este recibe. La utilidad permite al usuario poder monitorear y (desde la versión 4.15) intervenir en el proceso de interacción entre el programa y el núcleo, incluidas las llamadas continuas del sistema, las señales emergentes y los cambios en el estado del proceso
Su funcionamiento es posible por una característica del núcleo linux llamada ptrace. Es similar a la aplicación truss disponible en otros sistemas Unix. El programa Cygwin provee de una utilidad similar. Su uso más común consiste en arrancarlo junto al programa al que se efectúa el trazado, el cual imprime una lista de las llamadas al sistema que ejecuta.
Es útil para averiguar la causa del fallo de un programa determinado porque informa de situaciones en las que, por ejemplo, el programa está intentando acceder a un fichero que no existe o para el que no tiene permiso de lectura.
De las características que se destacan de Strace se destacan las siguientes:
- Poder especificar un filtro de nombres de syscall que se debe rastrear (mediante la -e trace=opción): por nombre, como clone, fork, vfork ; usando uno de los grupos predefinidos, como % ipc o % file ; o (desde la versión 4.17) usando la sintaxis de expresión regular, como clock_ *.
- Especificar una lista de rutas a rastrear ( -P /etc/ld.so.cachepor ejemplo).
- Especificar una lista de descriptores de archivo cuya E/ S debe ser volcada
- Contar el tiempo de ejecución y el recuento de syscall
- Impresión de marcas de tiempo relativas o absolutas
- Modificar el código de retorno y error de las llamadas al sistema especificadas e inyectar señales tras su ejecución
- Extracción de información sobre descriptores de archivos (incluidos sockets).
- Impresión de trazas de pila, incluyendo (desde la versión 4.21) símbolo de demanda (-k).
- Filtrado por estado de retorno de syscall
- strace admite la decodificación de argumentos de algunas clases de comandos ioctl , como BTRFS_ * , V4L2_ * , DM_ * , NSFS_ * , MEM * , EVIO * , KVM_ * y varios otros.
Como strace solo detalla las llamadas al sistema, no se puede usar para detectar tantos problemas como un depurador de código como GNU Debugger (gdb). Sin embargo, es más fácil de usar que un depurador de código, y es una herramienta extremadamente útil para los administradores del sistema. También lo usan los investigadores para generar rastreos de llamadas del sistema para su posterior reproducción.
Sobre la nueva versión de Strace 5.3
Recientemente se presento la nueva versión de strace 5.3 en la cual la licencia del código cambió de BSD a LGPLv2.1 + y GPLv2 + para la versión de pruebas.
Además dentro de los cambios que se destacan que es hay soporte para filtrar llamadas del sistema mediante la creación de filtros seccomp («–seccomp-bpf»), así como también mediante el código de retorno («-e status = …»).
Otro de los cambios que se destacan en el anuncio de esta nueva versión es que los desarrolladores añadieron soporte para llamadas de sistema de decodificación pidfd_open y clone3, ademas de una decodificación mejorada de llamadas al sistema io_cancel, io_submit, s390_sthyi y syslog.
También en el anuncio se destaca que las listas de comandos ioctl se sincronizan con el kernel Linux 5.3
De los demás cambios que se mencionan en el anuncio, son:
- Decodificación de protocolo NETLINK_ROUTE mejorada
- El atributo de enlace de red decodificado UNIX_DIAG_UID y los comandos ioctl WDIOC_ *
- Se actualizaron las listas de constantes AUDIT_ *, BPF_ *, ETH_ *, KEYCTL_ *, KVM_ *, MAP_ *, SO_ *, TCP_ *, V4L2_ *, XDP_ * y * _MAGIC
¿Como instalar strace 5.3 en Ubuntu y derivados?
La utilidad Strace puede ser encontrada dentro de los repositorios de Ubuntu así como sus derivados, pero en cuanto a esta nueva versión, no se ha incluido en los repositorios. La instalación por medio de los repositorios la pueden hacer ejecutado el siguiente comando:
sudo apt install strace
Ahora para quienes quieran instalar esta nueva versión deberán descargar el código fuente y realizar la compilación en su sistema.
Descargan el código fuente con:
git https://gitlab.com/strace/strace.git
Entran con:
cd strace
Y realizan la compilación con:
./configure && make && make install
Finalmente en cuanto al uso, pueden encontrar algunas guiás en la red.