Cómo usar strace para rastrear llamadas y señales del sistema – CloudSavvy IT

Bash Shell

El rastreo de un programa de computadora no está reservado solo para aquellos que tienen el código fuente, pueden leerlo y saben cómo usar un depurador. Cualquier usuario de Linux puede rastrear un ejecutable con strace. ¡Averiguar como!

Que es strace?

strace es una utilidad de Linux que le permite rastrear las llamadas al sistema que realiza una aplicación determinada. También captará señales y producirá una salida detallada de toda la información que observe.

Una persona nueva en el rastreo y el rastreo, en general, podría preguntar por qué esto es útil. Un ingeniero de TI profesional podría preguntar cuánta información puede captar Strace realmente, especialmente si sabe cuánta información puede ver un depurador como GDB.

Si está interesado en depurar códigos y programas informáticos, consulte nuestro artículo Depuración con GDB: introducción.

¡Hay buenas noticias en ambos casos! El seguimiento de todas las llamadas y señales del sistema proporciona una imagen completa del funcionamiento de un programa, y ​​es una excelente herramienta de resolución de problemas e incluso de depuración. Además, se ejecuta durante el tiempo de ejecución (como un proceso de envoltura), pero se puede rastrear fácilmente en un archivo de registro y ofrece una descripción general fácil de digerir de las acciones de un programa.

Comparando esto con GDB, que también es un proceso de envoltura, las cosas son sustancialmente diferentes. Por ejemplo, en GDB, uno podría rastrear un programa paso a paso (por ejemplo, una línea de código a la vez o un bloque lógico de código, o usando puntos de interrupción en el código). Sin embargo, estos pasos se realizan durante runtime, mientras que strace simplemente ejecuta el programa como un todo hasta que ocurre algún error o hasta que se completa.

El ingeniero o usuario puede ir y analizar el registro completo (basado en texto), buscar cadenas interesantes, etc. Además, GDB permitiría ver señales y llamadas al sistema también, aunque configurarlo y analizarlo es mucho más complejo que con strace.

Con strace, simplemente puede ejecutar el programa en strace (es decir strace some_program), y aunque esto es aproximadamente lo mismo que GDB, la operación difiere significativamente, como se describe anteriormente.

En cuanto a la cantidad de información que se puede ver en una traza, es bueno dar un paso atrás y recordar de dónde provienen la mayoría de los problemas de la computadora: disco lleno, memoria agotada, no se encontró algún archivo, entrada incorrecta, etc.

Especialmente en las áreas de acceso al disco, strace realmente brilla. Como registra todas las llamadas al sistema, cada acceso al disco es muy visible en el registro. Nuevamente, puede buscar cadenas de texto y nombres de archivo relevantes, aunque tenga en cuenta que, a veces, las cadenas pueden tener una longitud reducida, por lo que solo la salida parcial puede ser visible.

En resumen, si tuviéramos que calificar strace como una herramienta de depuración y / o solución de problemas y asígnele un lugar en una caja de herramientas de usuario de Linux más nueva o más competente, entonces, en ambos casos, la respuesta es aproximadamente en el medio, aunque se inclina un poco más hacia la resolución de problemas que hacia la depuración. Vamos a instalar strace Siguiente.

RELACIONADOS: Cómo funcionan las puertas lógicas: OR, AND, XOR, NOR, NAND, XNOR y NOT

Instalando strace

Instalar strace en su distribución de Linux basada en Debian / Apt (como Ubuntu y Mint), ejecute el siguiente comando en su terminal:

sudo apt install strace

Instalar strace en su distribución de Linux basada en RedHat / Yum (como RHEL, Centos y Fedora), ejecute el siguiente comando en su terminal:

sudo yum install strace

Utilizando strace

Después de instalar strace, es bastante sencillo empezar. Podemos, por ejemplo, rastrear el Linux sleep comando / utilidad:

strace sleep 1

strace de un proceso de sueño de un segundo

Inmediatamente, el resultado prueba la afirmación anterior. Hay una gran cantidad de información sobre todas las acciones tomadas por el (muy) simple sleep 1 comando, que, después de todo, solo acciones durmiendo por un solo segundo.

Veamos algunas cosas que podemos observar de inmediato:

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

Podemos ver que poco después de iniciarse, el programa intentó acceder (en el disco) al archivo /etc/ld.so.preload. También podemos ver que esto falló (-1 status), ya que no se encontró el archivo (ENOENT) con el mensaje de error descriptivo No such file or directory.

Solo esta única línea de salida podría dar lugar a más investigaciones. Por ejemplo, podemos escanear nuestro motor de búsqueda favorito en busca de lo que el archivo /etc/ld.so.preload es / hace y qué sucede cuando un programa no puede encontrarlo, así como también cómo podemos instalarlo.

Como puede ver, si ejecutara un software / programa más complicado en strace, es posible que descubra que está intentando acceder a un archivo, por ejemplo, un archivo compartido .so biblioteca y no puedo encontrarlo. Se analiza fácilmente y probablemente se arregla fácilmente gracias a strace.

A continuación, vemos el conf.d caché binario que se abre correctamente como solo lectura (O_RDONLY), con el indicador close-on-exec (utilizado en programas multiproceso para evitar condiciones de carrera) O_CLOEXEC conjunto de banderas:

openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

Incluso si uno no sabe lo que significa cada elemento, una simple búsqueda en línea proporcionará rápidamente información sobre cada término o palabra específica, lo que le ayudará a comprender la información presentada y lo que está sucediendo.

También de particular interés es esta línea hacia el final:

+++ exited with 0 +++

Esto indica que el programa se cerró correctamente con el código de salida. 0. Un código de salida de 0 generalmente indica una ejecución y finalización satisfactoria en los programas de Linux.

Como puede ver en los ejemplos anteriores, es fácil ver lo que hace un programa usando strace. Se puede analizar cada línea e incluso cada palabra en cada línea y, a menudo, se requiere un motor de búsqueda para arrojar algo de luz. Sin embargo, incluso echar un vistazo a la salida de un programa que falla puede ser suficiente para encontrar la causa exacta y solucionarlo, y especialmente cuando, por ejemplo, falta un archivo requerido, etc.

RELACIONADOS: Cómo afectan los niveles de ejecución de Linux a los servicios en ejecución

Seguimiento de procesos secundarios

Cuando usas strace, a veces parecerá que strace no está rastreando correctamente todas las llamadas al sistema del programa, etc. Esto podría deberse simplemente a que el programa que se está rastreando ha iniciado / iniciado varios procesos secundarios, por ejemplo, al bifurcar procesos secundarios.

Es simple incluir estos procesos secundarios en la captura de strace: simplemente agregue el -f opción a la línea de comando (es decir, strace -f your_program), y también se rastrearán todas las llamadas al sistema, etc., de todos los procesos secundarios.

Terminando

En este artículo, discutimos el strace herramienta, que se puede utilizar para rastrear cualquier programa o aplicación que se ejecute en una computadora basada en Linux.

Después de instalar la herramienta, podemos iniciar el programa de manera simple y directa bajo strace y disfrute del alto nivel de información de resolución de problemas y depuración que strace envoltorio nos presentará.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad