strace es una utilidad de espacio de usuario de diagnóstico, depuración e instrucción para Linux . Se utiliza para monitorear y manipular las interacciones entre los procesos y el kernel de Linux , que incluyen llamadas al sistema , entregas de señales y cambios de estado del proceso. La operación de strace es posible gracias a la característica del kernel conocida como ptrace .
Autor (es) original (es) | Paul Kranenburg |
---|---|
Desarrollador (es) | Dmitry Levin |
Lanzamiento estable | 5.12 [1] / 26 de abril de 2021 |
Repositorio | |
Escrito en | C [2] |
Sistema operativo | Linux |
Plataforma | AArch64 , DEC Alpha , ARC , ARM EABI / OABI , AVR32 , Blackfin , C-SKY, HP PA-RISC , IA-32 , IA-64 , Motorola 68k , Imagination META , MicroBlaze , MIPS , Nios II , OpenRISC , Power ISA 32/64 bit, RISC-V , System / 390 / z / Architecture , SuperH 32/64 bit, SPARC 32/64 bit, TILE , TILEPro , TILE-Gx , x86-64 , x32 ABI , Xtensa |
Disponible en | inglés |
Tipo | Depuración |
Licencia | LGPL v2.1 + |
Sitio web | strace |
Algunos sistemas similares a Unix proporcionan otras herramientas de diagnóstico similares a strace, como truss .
Historia
Strace fue escrita originalmente para SunOS por Paul Kranenburg en 1991, de acuerdo con su aviso de derechos de autor, y publicada a principios de 1992, en el volumen tres de comp.sources.sun. El archivo README inicial contenía lo siguiente: [3]
strace (1) es un rastreador de llamadas al sistema para sistemas Sun (tm) muy parecido al programa proporcionado por Sun traza (1) . strace (1) es una utilidad útil para depurar programas para los que no hay una fuente disponible y que, lamentablemente, incluye casi todo el software del sistema suministrado por Sun.
Más tarde, Branko Lankester portó esta versión a Linux , lanzando su versión en noviembre de 1992 con la segunda versión siguiente en 1993. [4] [5] Richard Sladkey combinó estas versiones separadas de strace en 1993, y portó el programa a SVR4 y Solaris en 1994, [6] resultando en strace 3.0 que fue anunciado en comp.sources.misc a mediados de 1994. [7]
A partir de 1996, strace fue mantenido por Wichert Akkerman. Durante su mandato, el desarrollo de strace migró a CVS ; Se introdujeron puertos a FreeBSD y muchas arquitecturas en Linux (incluyendo ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC). En 2002, la carga del mantenimiento de strace se transfirió a Roland McGrath. Desde entonces, strace ganó soporte para varias arquitecturas nuevas de Linux (AMD64, s390x, SuperH), soporte bi-arquitectura para algunas de ellas, y recibió numerosas adiciones y mejoras en decodificadores de llamadas al sistema en Linux; El desarrollo de strace migró a git durante ese período. Desde 2009, Dmitry Levin mantiene activamente strace. strace ganó soporte para arquitecturas AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC-V, Tile / TileGx, Xtensa desde entonces.
La última versión de strace que tenía algún código (evidentemente muerto) [8] para sistemas operativos que no eran Linux fue 4.6, lanzada en marzo de 2011. [9] En la versión 4.7 de strace, lanzada en mayo de 2012, [10] todos los que no son Linux se había eliminado el código; [11] desde strace 4.13, [12] el proyecto sigue el calendario de lanzamiento del kernel de Linux, y con la versión 5.0, [13] sigue el esquema de versiones de Linux también.
En 2012, strace también obtuvo soporte para el rastreo de rutas y la decodificación de rutas de descriptores de archivos. [14] En agosto de 2014, se lanzó strace 4.9, [15] [16] donde se agregó soporte para la impresión de trazos de pila. En diciembre de 2016, se implementó la función de inyección de fallas de llamada al sistema [17] [18] .
Historial de versiones
Versión | Fecha de lanzamiento |
---|---|
5.12 | 26 de abril de 2021 [19] |
5.11 | 17 de febrero de 2021 [20] |
5.10 | 14 de diciembre de 2020 [21] |
5.9 | 24 de septiembre de 2020 [22] |
5.8 | 6 de agosto de 2020 [23] |
5.7 | 1 de junio de 2020 [24] |
5,6 | 7 de abril de 2020 [25] |
5.5 | 6 de febrero de 2020 [26] |
5.4 | 28 de noviembre de 2019 [27] |
5.3 | 25 de septiembre de 2019 [28] |
5.2 | 12 de julio de 2019 [29] |
5.1 | 22 de mayo de 2019 [30] |
5,0 | 19 de marzo de 2019 [31] |
4.26 | 26 de diciembre de 2018 [32] |
4.25 | 30 de octubre de 2018 [33] |
4.24 | 14 de agosto de 2018 [34] |
4.23 | 14 de junio de 2018 [35] |
4.22 | 5 de abril de 2018 [36] |
4.21 | 13 de febrero de 2018 [37] |
4.20 | 13 de noviembre de 2017 [38] |
4.19 | 5 de septiembre de 2017 [39] |
4.18 | 5 de julio de 2017 [40] |
4.17 | 24 de mayo de 2017 [41] |
4.16 | 14 de febrero de 2017 [42] |
4.15 | 14 de diciembre de 2016 [43] |
4.14 | 4 de octubre de 2016 [44] |
4.13 | 26 de julio de 2016 [45] |
4.12 | 31 de mayo de 2016 [46] |
4.11 | 21 de diciembre de 2015 [47] |
4.10 | 6 de marzo de 2015 [48] |
4.9 | 15 de agosto de 2014 [49] |
4.8 | 3 de junio de 2013 [50] |
4,7 | 2 de mayo de 2012 [51] |
4.6 | 15 de marzo de 2011 [52] |
4.5.20 | 13 de abril de 2010 |
4.5.19 | 21 de octubre de 2009 |
4.5.18 | 28 de agosto de 2008 |
4.5.17 | 21 de julio de 2008 |
4.5.16 | 3 de agosto de 2007 |
4.5.15 | 16 de enero de 2007 |
4.5.14 | 16 de enero de 2007 |
4.5.13 | 3 de agosto de 2005 |
4.5.12 | 8 de junio de 2005 |
4.5.11 | 22 de marzo de 2005 |
4.5.10 | 13 de marzo de 2005 |
4.5.9 | 4 de febrero de 2004 |
4.5.8 | 19 de octubre de 2004 |
4.5.7 | 31 de agosto de 2004 |
4.5.6 | 12 de julio de 2004 |
4.5.5 | 27 de junio de 2004 |
4.5.4 | 3 de junio de 2004 |
4.5.3 | 16 de abril de 2004 |
4.5.2 | 1º de marzo de 2004 |
4.5.1 | 13 de noviembre de 2003 |
4.5 | 24 de septiembre de 2003 |
4.4 | 19 de agosto de 2001 |
4.3.1 | 7 de abril de 2001 |
4.3 | 1º de abril de 2001 |
4.2 | 21 de enero de 2000 |
4.1 | 26 de noviembre de 1999 |
4.0.1 | 25 de julio de 1999 |
4.0 | 9 de julio de 1999 |
3.99.1 | 9 de junio de 1999 |
3,99 | 27 de abril de 1999 |
3.1 | 1 de junio de 1996 |
3,0 | 9 de julio de 1994 [53] |
Uso y características
El uso más común es iniciar un programa usando strace, que imprime una lista de llamadas al sistema realizadas por el programa. Esto es útil si el programa se bloquea continuamente o no se comporta como se esperaba; por ejemplo, el uso de strace puede revelar que el programa está intentando acceder a un archivo que no existe o que no se puede leer.
Una aplicación alternativa es usar la -p
bandera para adjuntar a un proceso en ejecución. Esto es útil si un proceso ha dejado de responder y podría revelar, por ejemplo, que el proceso se está bloqueando al intentar establecer una conexión de red.
Entre otras características, strace permite lo siguiente:
- Especificar un filtro de nombres de llamadas al sistema que se deben rastrear (a través de la
-e trace=
opción): por nombre, como clon, tenedor, vfork ; utilizando uno de los grupos predefinidos, como % ipc o % archivo ; o (desde strace 4.17) usando sintaxis de expresión regular, como-e trace=/clock_.*
. - Especificar una lista de rutas a rastrear (
-P /etc/ld.so.cache
por ejemplo). - Especificar una lista de descriptores de archivos cuyas E / S deben volcarse (
-e read=
y-e write=
opciones). - Contar el tiempo de ejecución y el recuento de syscall (
-T
,-c
,-C
, y-w
opciones). - Impresión de marcas de tiempo (
-t
y-r
opciones) relativas o absolutas . - Modificar el código de retorno y error de las llamadas al sistema especificadas e inyectar señales en su ejecución (desde strace 4.15,
-e inject=
opción). - Extraer información sobre descriptores de archivos (incluidos sockets,
-y
opción). - Impresión de trazos de pila, incluido (desde strace 4.21) símbolo de demanda (
-k
opción). - Filtrado por estado de retorno de syscall (
-e status=
opción; desde strace 5.2 [54] ).
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 muy útil para los administradores de sistemas. Los investigadores también lo utilizan para generar seguimientos de llamadas al sistema para la reproducción posterior de llamadas al sistema . [55] [56] [57]
Ejemplos de
El siguiente es un ejemplo de salida típica del strace
comando:
usuario @ servidor: ~ $ strace ls ... open (".", O_RDONLY | O_NONBLOCK | O_LARGEFILE | O_DIRECTORY | O_CLOEXEC) = 3 fstat64 (3, {st_mode = S_IFDIR | 0755, st_size = 4096, ...}) = 0 fcntl64 (3, F_GETFD) = 0x1 (marca FD_CLOEXEC) getdents64 (3, / * 18 entradas * /, 4096) = 496 getdents64 (3, / * 0 entradas * /, 4096) = 0 cerrar (3) = 0 fstat64 (1, {st_mode = S_IFIFO | 0600, st_size = 0, ...}) = 0 mmap2 (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f2c000 write (1, "autofs \ nbackups \ ncaché \ nflexlm \ ngames "..., 86autofsA
El fragmento anterior es solo una pequeña parte de la salida de strace cuando se ejecuta en el comando ' ls '. Muestra que el directorio de trabajo actual se abre, se inspecciona y se recupera su contenido. La lista resultante de nombres de archivos se escribe en la salida estándar.
Herramientas similares
Los diferentes sistemas operativos cuentan con otras herramientas de instrumentación similares o relacionadas , que ofrecen características similares o más avanzadas; Algunas de las herramientas (aunque usen el mismo nombre o uno similar) pueden usar mecanismos de trabajo completamente diferentes, lo que da como resultado conjuntos de características o resultados diferentes. Dichas herramientas incluyen las siguientes:
- Linux tiene ltrace que puede rastrear llamadas a bibliotecas y sistemas, xtrace que puede rastrear programas de X Window , [58] SystemTap , perf y trace-cmd y KernelShark que extienden ftrace .
- AIX proporciona comando truss
- HP-UX ofrece la Comando Tusc
- Solaris / Illumos tiene truss y DTrace
- UnixWare proporciona comando truss
- FreeBSD proporciona la comando truss , ktrace y DTrace
- NetBSD proporciona ktrace y DTrace
- OpenBSD usa ktrace y kdump
- macOS proporciona ktrace (10.4 y anterior), DTrace (de Solaris) y dtruss asociado en 10.5 y posterior. [59]
- MS Windows tiene una utilidad similar llamada StraceNT, escrita por Pankaj Garg, [60] y una utilidad similar basada en GUI llamada Process Monitor , desarrollada por Sysinternals .
Ver también
- gdb
- Lista de comandos de Unix
- lsof
Referencias
- ^ "strace 5.12 lanzado" (lista de correo). 2021-04-26 . Consultado el 26 de abril de 2021 .
- ^ https://openhub.net/p/strace
- ^ Paul Kranenburg (2 de marzo de 1992). "Strace - un rastreador de syscall alternativo" . Grupo de noticias : comp.sources.sun .
- ^ Branko Lankester (5 de noviembre de 1992). "primera versión de Linux de strace" .
- ^ Branko Lankester (18 de junio de 1993). "segunda versión de Linux de strace" .
- ^ "strace" . manned.org. 21 de junio de 1994.
- ^ "Índice de SUNET de /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace" . Consultado el 14 de enero de 2015 .
- ^ Denys Vlasenko (7 de febrero de 2012). "¿Qué tal eliminar código que no sea de Linux?" .
- ^ Dmitry V. Levin (16 de marzo de 2011). "Strace 4.6 lanzado" .
- ^ Dmitry V. Levin (2 de mayo de 2012). "Strace 4.7 lanzado" .
- ^ Dmitry V. Levin (20 de abril de 2012). "Cambios notables en la versión 4.7" .
- ^ Dmitry V. Levin (4 de octubre de 2016). "Strace 4.14 lanzado" .
- ^ Dmitry V. Levin (19 de marzo de 2019). "Strace 5.0 lanzado" .
- ^ Dmitry V. Levin (1 de mayo de 2012). "Cambios notables en la versión 4.7" .
- ^ Dmitry V. Levin (15 de agosto de 2014). "Strace 4.9 lanzado" .
- ^ Dmitry V. Levin (15 de agosto de 2014). "Cambios notables en la versión 4.9" .
- ^ Dmitry V. Levin (14 de diciembre de 2016). "Strace 4.15 lanzado" .
- ^ Dmitry V. Levin (14 de diciembre de 2016). "Cambios notables en la versión 4.15" .
- ^ Dmitry V. Levin (26 de abril de 2021). "Strace 5.12 lanzado" .
- ^ Dmitry V. Levin (17 de febrero de 2021). "Strace 5.11 lanzado" .
- ^ Dmitry V. Levin (14 de diciembre de 2020). "Strace 5.10 lanzado" .
- ^ Dmitry V. Levin (24 de septiembre de 2020). "Strace 5.9 lanzado" .
- ^ Dmitry V. Levin (6 de agosto de 2020). "Strace 5.8 lanzado" .
- ^ Dmitry V. Levin (1 de junio de 2020). "Strace 5.7 lanzado" .
- ^ Dmitry V. Levin (7 de abril de 2020). "Strace 5.6 lanzado" .
- ^ Dmitry V. Levin (6 de febrero de 2020). "Strace 5.5 lanzado" .
- ^ Dmitry V. Levin (28 de noviembre de 2019). "Strace 5.4 lanzado" .
- ^ Dmitry V. Levin (25 de septiembre de 2019). "Strace 5.3 lanzado" .
- ^ Dmitry V. Levin (12 de julio de 2019). "Strace 5.2 lanzado" .
- ^ Dmitry V. Levin (22 de mayo de 2019). "Strace 5.1 lanzado" .
- ^ Dmitry V. Levin (19 de marzo de 2019). "Strace 5.0 lanzado" .
- ^ Dmitry V. Levin (26 de diciembre de 2018). "Strace 4.26 lanzado" .
- ^ Dmitry V. Levin (30 de octubre de 2018). "Strace 4.25 lanzado" .
- ^ Dmitry V. Levin (14 de agosto de 2018). "Strace 4.24 lanzado" .
- ^ Dmitry V. Levin (14 de junio de 2018). "Strace 4.23 lanzado" .
- ^ Dmitry V. Levin (5 de abril de 2018). "Strace 4.22 lanzado" .
- ^ Dmitry V. Levin (13 de febrero de 2018). "Strace 4.21 lanzado" .
- ^ Dmitry V. Levin (13 de noviembre de 2017). "Strace 4.20 lanzado" .
- ^ Dmitry V. Levin (5 de septiembre de 2017). "Strace 4.19 lanzado" .
- ^ Dmitry V. Levin (5 de julio de 2017). "Strace 4.18 lanzado" .
- ^ Dmitry V. Levin (24 de mayo de 2017). "Strace 4.17 lanzado" .
- ^ Dmitry V. Levin (14 de febrero de 2017). "Strace 4.16 lanzado" .
- ^ Dmitry V. Levin (14 de diciembre de 2016). "Strace 4.15 lanzado" .
- ^ Dmitry V. Levin (4 de octubre de 2016). "Strace 4.14 lanzado" .
- ^ Dmitry V. Levin (26 de julio de 2016). "Strace 4.13 lanzado" .
- ^ Dmitry V. Levin (31 de mayo de 2016). "Strace 4.12 liberado" .
- ^ Dmitry V. Levin (21 de diciembre de 2015). "Strace 4.11 lanzado" .
- ^ Dmitry V. Levin (6 de marzo de 2015). "Strace 4.10 liberado" .
- ^ Dmitry V. Levin (15 de agosto de 2014). "Strace 4.9 lanzado" .
- ^ Dmitry V. Levin (3 de junio de 2013). "Strace 4.8 lanzado" .
- ^ Dmitry V. Levin (2 de mayo de 2012). "Strace 4.7 lanzado" .
- ^ Dmitry V. Levin (15 de marzo de 2011). "Strace 4.6 lanzado" .
- ^ Rick Sladkey (9 de julio de 1994). "v43i075: strace - rastreador de llamadas del sistema para sunos, linux, svr4, solaris2, Part01 / 10" .
- ^ Su abreviatura para mostrar solo llamadas exitosas,
-z
opción, se agregó originalmente en strace 4.5, pero nunca se documentó porque no funcionaba correctamente. - ^ Horky, Jiri (2013). "El perfilador IO de ioapps y el reproductor de seguimiento de IO" . Consultado el 16 de septiembre de 2013 .
- ^ Waterland, Amos (2007). "El repetidor de llamadas del sistema sreplay" . Consultado el 16 de septiembre de 2013 .
- ^ Burton, Ariel (1998). "Caracterización de la carga de trabajo mediante el seguimiento y la reejecución de llamadas del sistema ligero" (PDF) . Consultado el 16 de septiembre de 2013 .
- ^ "XTrace - Trace las conexiones del protocolo X" . xtrace.alioth.debian.org . Consultado el 12 de agosto de 2014 .
- ^ "Página del manual de dtrace (1) Mac OS X" . Developer.apple.com . Consultado el 23 de julio de 2014 .
- ^ "IntellectualHeaven - Strace para Windows" . intelectualheaven.com . Consultado el 29 de enero de 2015 .
enlaces externos
- página del proyecto strace
- Página del manual
- Artículo de revisiones de SO sobre strace
- "Seguimiento de llamadas del sistema con strace" , una charla con una descripción general de las funciones y el uso de strace, impartida por Michael Kerrisk en NDC TechTown 2018
- "Modern strace" ( fuente ), una charla con una descripción general de las características de strace, impartida por Dmitry Levin en DevConf.cz 2019