Aunque muchos sistemas operativos intentan evitar que mires "bajo el capó", Unix y Linux incentivan esta práctica positivamente. Una herramienta excelente que hemos revisado anteriormente es strace. Al utilizar esta utilidad, puedes observar detalles sobre cada llamada al sistema que realiza un programa. Como es de imaginar, para cualquier software de gran escala, la salida generada por strace puede ser inmensa.
Aunque no siempre soy fanático de las interfaces gráficas (GUI), este es uno de esos casos donde facilitar la navegación de datos es una idea brillante. Aquí entra strace-tui, una interfaz de usuario basada en texto (TUI) para strace creada por [Rodrigodd]. El programa puede analizar la salida de strace o gestionar la ejecución del mismo, y en ambos casos, muestra la información de una manera sumamente útil.
Comencé revisando strace_ui de [janestreet], pero la configuración de OCaml me arrojaba errores constantes, así que decidí desistir. Por otro lado, strace-tui se instala como muchos programas de Rust, utilizando cargo, y el proceso fue fluido.
Un ejemplo práctico

El único inconveniente que tuve al ejecutar la herramienta fue que normalmente no mantengo ~/.cargo/bin en mi variable de entorno PATH. Puedes añadirlo a tu ruta, crear un enlace simbólico al ejecutable o resolverlo de cualquier otra manera estándar.
Como ejemplo, realicé el seguimiento de un comando de enlace simbólico (ln -sf nature.txt test.link). Es sencillo extraer información esencial en la línea superior. El comando ejecutó 112 llamadas al sistema, 14 de ellas fallaron (lo cual es esperado), no hubo llamadas inconclusas, ni señales, y solo se registró un PID.
La parte inferior muestra las acciones disponibles. Las flechas o las teclas j y k, junto con los controles habituales como Home y Page Down, permiten desplazarse por la lista. Las flechas derecha e izquierda expanden o colapsan los elementos. Esto mostrará detalles sobre la llamada en cuestión, incluyendo los argumentos y los valores de retorno. Puedes consultar la ayuda integrada para conocer todos los detalles.
Herramientas útiles para el filtrado
El verdadero poder, sin embargo, reside en filtrar el ruido y buscar elementos específicos. Si estás observando algo que no deseas ver, puedes presionar la tecla h minúscula para ocultarlo; ten en cuenta que oculta todo lo similar, no solo una línea individual. Una H mayúscula abrirá un diálogo de filtro donde puedes incluir o excluir grupos de datos.
La búsqueda también es una forma excelente de encontrar lo que necesitas. La tecla de barra diagonal / inicia una búsqueda. La tecla N permite navegar entre resultados, con una entrada en minúscula moviéndose hacia adelante y una en mayúscula hacia atrás.
Por ejemplo, si solo quisiera observar los comandos openat, podría abrir el diálogo. No solo muestra los filtros, sino que también indica cuántos elementos coinciden (hay 30 instancias de openat). Presionar a desactivará todas las entradas y, posteriormente, seleccionar openat reducirá drásticamente la cantidad de salida. También seleccioné symlinkat, read y fstat para centrarme únicamente en los elementos relacionados con archivos.

Muchas de las operaciones de archivo están relacionadas con la carga de librerías compartidas y locales. Para encontrar la línea específica que realiza el enlace, fue sencillo presionar la tecla / y escribir parte del texto del archivo, como test.link.
Esto resaltará la línea symlinkat, lo cual no es una sorpresa, pero este es un ejemplo sencillo. Si presionas Enter o la flecha derecha, puedes ver más detalles, incluyendo argumentos, el valor de retorno, el tiempo de ejecución y un backtrace que muestra cómo el programa llegó a esa llamada.
Este es un ejemplo simple, pero el programa también puede visualizar traces de múltiples hilos o procesos utilizando gráficos. Esto resulta útil para analizar programas del mundo real.
Incluso este programa sencillo genera mucha información. Por supuesto, si intentas depurar un problema relacionado con locales, todas las líneas sobre la carga de archivos que no existen podrían ser valiosas. Pero la mayoría de las veces, no te interesan los procesos de carga estándar, y una herramienta como esta ayuda a eliminar la "charla" innecesaria.
Enlaces faltantes en el desarrollo
Según la página del proyecto, faltan algunas funciones, y presumimos que esta es la hoja de ruta para el desarrollo futuro.
En particular, el programa no puede filtrar traces para procesos o hilos específicos. Tampoco existe una forma de copiar detalles al portapapeles o exportar los traces filtrados a un archivo. Por supuesto, al ser código abierto, siempre puedes ofrecerte como voluntario para añadir estas u otras funciones de tu preferencia.
Si pruebas strace-tui, o tienes otros consejos y trucos para strace que te gustaría compartir, haznos saber en los comentarios.
Leer más de esta serie: Linux-Fu
Vía Hackaday.




