El comando strace es una poderosa herramienta que muestra todas las llamadas al sistema emitidas por los programas de espacio de usuario.
strace muestra los parámetros de estas llamadas y devuelve el valor en forma simbólica. Strace recibe información del kernel y no necesita construir el kernel de ninguna manera especial.
El siguiente registro registra varias opciones comunes.
1 -f -F opción le dice a strace que rastree el progreso de fork y vfork
2 -o xxx.txt Documentos
3 -e execve execve solamente el registro de tales sistemas requieren
— — — — — — — — — — — — — — — — —
el proceso no puede iniciarse, la velocidad de software en ejecución de repente se desaceleró, programa y " SegmentFault y " también lo son el sistema Unix para que cada usuario dolores de cabeza,
Este artículo muestra cómo usar las tres herramientas de depuración comúnmente utilizadas truss, strace y ltrace para diagnosticar rápidamente la "dificultad" del software a través de tres casos prácticos.
truss and strace se utilizan para rastrear la llamada al sistema o la generación de señal de un proceso, mientras que ltrace se usa para rastrear las funciones de la biblioteca de llamadas de proceso. Truss pronto como System V R4 desarrollar depurador, incluyendo Aix, FreeBSD, incluyendo la mayoría de sistemas Unix viene con esta herramienta;
El strace escrita originalmente para el sistema de SunOS, ltrace apareció por primera vez en GNU /DebianLinux.
Estas dos herramientas ahora se han transferido a la mayoría de los sistemas Unix. La mayoría de las distribuciones de Linux vienen con strace y ltrace, y FreeBSD también puede instalarlas a través de puertos.
No se puede iniciar una nueva línea de comandos del depurador, puede poner braguero, strace o ltrace unido a un programa existente para encargar un rodaje PID. Básica herramienta de depuración uso de tres de la misma, aquí sólo hay tres, y tres son los parámetros de línea de comandos más comúnmente utilizados:
f: Además del seguimiento del proceso actual, el También rastrear sus procesos hijos.
-o file: escribe la salida en el archivo en lugar de mostrarla en la salida de error estándar (stderr).
-p pid: Se enlaza a un proceso en ejecución correspondiente a pid. Este parámetro se usa a menudo para depurar procesos en segundo plano.
Utilizando los tres parámetros anteriores, básicamente puede realizar la mayoría de las tareas de depuración. A continuación se muestran algunos ejemplos de la línea de comandos:
truss -o ls.truss ls - Al: rastrea la ejecución de ls -al y escribe la salida en el archivo /tmp/ls.truss.
strace -f -o vim.strace vim: rastrea la operación de vim y sus procesos secundarios, y escribe la salida en el archivo vim.strace.
ltrace -p 234: rastrea un proceso que ya se está ejecutando con un pid de 234.
tres salida de la herramienta formato de depuración es muy similar a la del Ejemplo strace:
brk (0) = 0 &veces; 8062aa8
brk (0 &veces; 8.063.000) = 0 &veces; 8063000
mmap2 (NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0 &veces; 92f) = 0 &veces; 40016000
Cada línea es una llamada del sistema, el lado izquierdo del signo igual es el nombre de la función a la que llama el sistema y sus parámetros, y el lado derecho es el valor de retorno de la llamada. braguero, strace y ltrace funciona casi de la misma, están en el proceso de puesta en servicio de seguimiento de llamadas utilizando el sistema ptrace, principio detallada no está dentro del alcance de este artículo, está interesado puede referirse a su código fuente.
citar dos ejemplos muestran cómo utilizar estas herramientas de depuración de tres software de diagnóstico y " Gotcha y ":
Caso uno: Ejecutar error de Clint Segmento
Sistema operativo
: FreeBSD-5.2.1-release
clint es una herramienta de análisis de código fuente estático de C ++ que se instala a través de los puertos. ejecute:
# Clint foo.cpp
Segmentation fault (núcleo objeto de dumping)
reunió en sistemas Unix " Fault Segmentación y " como en El cuadro de diálogo emergente "Operación no válida" en MS Windows
es igual de molesto. OK, usamos truss para clint
# tail clint.truss
739: leer (0 &veces; 6,0 y tiempos; 806f000,0 y tiempos; 1000) = 4096 (0 &veces; 1000)
739: fstat (6,0xbfbfe4d0 ) = 0 (0 &veces; 0)
739: fcntl (0 &veces; 6,0 y veces; 3,0 y veces; 0) = 4 (0 &veces; 4)
739: fcntl (0 &veces; 6 , 0 &veces; 4,0 y veces; 0) = 0 (0 &veces; 0)
739: cierre (6) = 0 (0 &veces; 0)
739: stat (y " /root /.clint /plugins y ", 0xbfbfe680) ERR # 2 ‘ No existe el fichero o directorio y rsquo;
SEÑAL 11
SEÑAL 11
Proceso detuvo a causa de: 16
salida del proceso, rval = 139
truss llamadas al sistema Clint seguimiento de la aplicación, y la salida a un archivo clint.truss, y luego ver las últimas líneas con una cola.
Tenga en cuenta la ejecución Clint de la última llamada al sistema (quinta línea de la parte inferior): stat (y " /root/.clint/plugins", 0xbfbfe680) ERR # 2 ‘ No existe el fichero o directorio y rsquo;, un problema Fuera de aquí: clint no puede encontrar el directorio " /root/.clint/plugins", lo que provocó un error de segmentación. ¿Cómo resolverlo? Muy simple: mkdir -p /root/.clint/plugins, pero esta vez ejecutando clint seguirá siendo "Falla de segmentación". Seguir utilizando la pista cercha, Clint también tienen que encontrar el directorio y " después /root/.clint/plugins/python", construyó este directorio Clint finalmente capaz de funcionamiento normal.
Caso 2: la velocidad de inicio de vim es significativamente más lenta
Sistema operativo: FreeBSD-5.2.1-release
vim La versión es 6.2.154. Después de ejecutar vim desde la línea de comandos, se tarda aproximadamente medio minuto en ingresar a la interfaz de edición y no hay salida de error. Verificó cuidadosamente que .vimrc y todos los scripts vim no están mal configurados, y no existe una solución para problemas similares en Internet. ¿Está pirateando el código fuente? No es necesario utilizar truss para encontrar el problema:
# truss -f -D -o vim.truss vim
aquí-D El propósito del parámetro es agregar una marca de tiempo relativa antes de cada línea de salida, que es el tiempo que lleva ejecutar una llamada al sistema. Mientras nos centramos en lo que las llamadas al sistema gastan mucho tiempo en ella, mira el vim.truss archivo de salida con menos cuidado, encontró rápidamente a dudas:
735: 0.000021511 socket (0 y tiempos; 2,0 y tiempos; 1,0 y veces; 0) = 4 (0 &veces; 4)
735: 0.000014248 setsockopt (0 &veces; 4,0 y veces; 6,0 y veces; 1,0xbfbfe3c8,0 y veces; 4) = 0 ( 0 y tiempos; 0)
Hemos sido de una manera convencional para completar una tarea hasta que sepamos que hay un mejor en
El Layer 2 Tunneling Protocol (L2TP) es un protocolo de túnel de Internet estándar de la industria
El sistema operativo Linux ha existido durante 20 años sin saberlo. Hace solo 20 años, recién celebr
Todos sabemos que lvm puede expandir el sistema de archivos en línea, la función es muy convenient
Configure manualmente la dirección IP de linux (centos), DNS, gateway
Los permisos insuficientes en /etc /hosts causan un error en el inicio de la base de datos Solución
Colección de usuarios: experiencia en el sistema operativo Linux compartiendo
Resuelva el tamaño de las particiones de inicio y raíz en el sistema de Linux CentOS
Requisitos de configuración de la versión de Linux
Error de programación de red y procesamiento en Linux
Se establece el área de intercambio de Linux (swap)
Exclusión de fallas en la impresión del sistema operativo
En linux, usar reaver para descifrar la contraseña de wifi inalámbrica y utilizar el método
El sistema no puede arrancar GURB
Pronunciación correcta de Linux
La batalla entre las características de Linux y Windows sistema de código abierto
Cómo configurar el acceso de Win10 a la carpeta Documents and Settings
Cómo ocultar el navegador IE en el sistema win7
Win8.1 brillo de la pantalla no se puede ajustar cómo hacerlo?
Se resumen algunos métodos de cierre de Windows 8 [Fotos] (1)
Cómo deshabilitar el disco de arranque y las ventanas Dr.watson
La configuración de permisos Xp y las impresoras de red denegaron la resolución de acceso