2012-02-09 30 views
12

Quiero usar Valgrind 3.7.0 para encontrar fugas de memoria en mi código nativo de Java. Estoy usando jdk1.6.0._29.Valgrind y Java

Para hacer eso, tengo que configurar el indicador --trace-children = yes. Ajuste de esa bandera, yo ya no puedo correr valgrind en cualquier aplicación Java, incluso un comando como:

valgrind --trace-children=yes --smc-check=all java -version 

recibirá el mensaje de error:

Error occurred during initialization of VM 
    Unknown x64 processor: SSE2 not supported 

que he visto en este enlace: https://bugs.kde.org/show_bug.cgi?id=249943, pero no fue útil

Ejecutando el programa sin Valgrind o sin el indicador --trace-children está bien.

¿Alguien tiene alguna idea de lo que puedo hacer?

Respuesta

8

Valgrind trampas y emula (hasta cierto punto) el procesador, esto es, aparentemente causando la JVM que se confunde acerca de su apoyo a la ESS y el rescate de

que sugeriría su intento decir la JVM no molestarse con SSE , deberías poder desactivarlo para el punto de acceso con la bandera JVM -XX:UseSSE=0

¡Buena suerte! valgrinding la JVM es un poco difícil ya que son un tanto hostiles entre sí

También podría ser su versión de valgrind y java He ejecutado su comando desde arriba a nivel local y no tuve problemas, usando valgrind 3.6.1 y ambos java 1.6 .0_26 y java 1.7.0-B147

12

debe deshabilitar JIT para ejecutar la JVM bajo valgrind, así:

valgrind java -Djava.compiler=NONE ... 

también, si al final usando supresiones generados (y lo más probable es!), puede haber un problema con la profundidad de las pilas de llamadas en las supresiones generadas, que es más probable que ocurra cuando se ejecuta bajo la JVM.

En versiones recientes de valgrind, las supresiones generadas pueden contener pilas de llamadas más profundas que las que puede procesar valgrind/memcheck. El síntoma de este problema es que valgrind termina de forma inesperada con el mensaje "demasiadas personas que llaman en el seguimiento de la pila".

Este problema se puede arreglar fácilmente: antes de construir valgrind, editar el archivo coregrind/m_errormgr.c y cambiar el valor codificado en el # define a un valor mayor (yo uso 99):

/* Max número de llamadas para el contexto en una supresión. */

#define VG_MAX_SUPP_CALLERS 99 

Luego construya e instale valgrind según los documentos.

+1

En el límite de llamadas de Valgrind más nuevo se establece en 500. –