2011-05-25 22 views
17

Estoy ansioso por encontrar una herramienta que me permita rastrear el comportamiento de las pthreads en un programa en el que estoy trabajando. Soy consciente de que allí donde antes había preguntas similares, ver here y here.Herramienta para rastrear y visualizar el comportamiento pthread en Linux

Como resultado, las herramientas que se recomiendan no son lo que necesito o parece imposible hacer que funcionen en mi máquina. Es Debian 6, de 32 bits en toda la arquitectura x86.

EZtrace en combinación con ViTE parece ser lo que estoy buscando. Pero desafortunadamente no puedo hacer que funcione. (Las herramientas no se compilan en algunas versiones, otras versiones se bloquean, nunca realmente funcionó. Otro equipo (Ubuntu 10.04 x64) muestra otros errores)

¿Existe una solución de rastreo que sea capaz de visualizar el comportamiento de un programa pthreaded en Linux, ¿de verdad se sabe que funciona?

Respuesta

2

Valgrind's Tool Suite [Linux y OS/X]

He usado Memcheck y funciona como se anuncia. Sin embargo, todavía no he usado las herramientas de visualización. No estoy seguro si la salida de Helgrind se puede adaptar para verla con kCachegrind.

La distribución Valgrind incluye cuatro [sic] de depuración útil y herramientas de perfilado:

  • Memcheck detecta problemas de gestión de memoria, y está dirigido principalmente a los programas en C y C++. Cuando un programa se ejecuta bajo la supervisión de Memcheck, se verifican todas las lecturas y escrituras de la memoria y se interceptan las llamadas a malloc/new/free/delete. Como resultado, Memcheck puede detectar si su programa:

    Accede a la memoria no debería ... Utiliza valores no inicializados de formas peligrosas. Fugas de memoria. Hace mal libera de bloques de pila (doblemente libres, no coincidentes). Pasa la superposición de bloques de memoria de origen y destino a memcpy() y funciones relacionadas. Memcheck informa estos errores tan pronto como se producen, dando el número de línea de origen en el que se produjo ...

  • Cachegrind es un generador de perfiles de caché. Realiza una simulación detallada de las cachés I1, D1 y L2 en su CPU y puede identificar con precisión las fuentes de fallas de caché en su código ...

  • Callgrind, de Josef Weidendorfer, es una extensión de Cachegrind. Proporciona toda la información que Cachegrind hace, además de información adicional sobre los callgraphs. Se dobló en la distribución principal de Valgrind en la versión 3.2.0. Disponible por separado es una herramienta de visualización increíble, KCachegrind, que ofrece una visión general mucho mejor de los datos que recoge Callgrind; también se puede usar para visualizar la salida de Cachegrind.

  • Massif es un generador de perfiles de montón. Realiza perfiles de montón detallados tomando instantáneas regulares del montón de un programa. Produce un gráfico que muestra el uso del montón con el tiempo, incluyendo información sobre qué partes del programa son responsables de la mayoría de las asignaciones de memoria ...

  • Helgrind es un depurador de hilo que se encuentra razas de datos en programas multihilo.Busca las ubicaciones de memoria a las que se accede mediante más de una cadena (POSIX p-), pero para las cuales no se puede encontrar ningún bloqueo utilizado sistemáticamente (pthread_mutex_). Tales ubicaciones son indicativas de falta de sincronización entre hilos, y podrían causar problemas difíciles de encontrar dependientes del tiempo. Es útil para cualquier programa que use pthreads. Es una herramienta algo experimental, por lo que sus comentarios son especialmente bienvenidos aquí.

+1

+1 para 'Helgrind', es una buena herramienta. Para probar rápidamente, haga 'valgrind --tool = helgrind ./myprogram --args'. He podido ver las posibles causas de las condiciones de carrera y los puntos muertos, pero aún hay algunos errores desagradables que aún no se han descubierto. Particularmente, todavía no he podido encontrar la causa de por qué un programa que mantengo falla al obtener un readlock en algún recurso, sin embargo, no hay otro hilo (no puedo encontrarlo hasta ahora) usando ese recurso - el único posible explicación ... Cualquier otra herramienta/sugerencia útil es bienvenida :-) – nemesisfixx

0

DIVINE puede dibujar un gráfico del espacio de estado y comprobar afirmaciones violados.

+0

El enlace en esta respuesta es un 404 :( – blueshift

Cuestiones relacionadas