2012-02-09 16 views
12

Chcę użyć Valgrind 3.7.0 do znajdowania wycieków pamięci w moim macierzystym kodzie Java. Używam jdk1.6.0._29.Valgrind i Java

Aby to zrobić, muszę ustawić flagę --trace-children = yes. Ustawienie tej flagi, już nie można uruchomić valgrind na każdej aplikacji, a nawet poleceń jak:

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

otrzyma komunikat o błędzie:

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

widziałem ten link: https://bugs.kde.org/show_bug.cgi?id=249943, ale to nie było przydatne.

Uruchamianie programu bez Valgrind lub bez flagi --trace-children jest w porządku.

Czy ktoś ma pojęcie o tym, co mogę zrobić?

Odpowiedz

8

Valgrind pułapek i emuluje (do pewnego stopnia) procesora, jest to pozornie powodując JVM się zagubić o wsparcie dla SSE i ratowanie

chciałbym zaproponować swoje Spróbujcie powiedzieć JVM nie męczyć się z SSE , powinieneś być w stanie wyłączyć to na hotspot z flagą JVM -XX:UseSSE=0

Powodzenia! valgrinding JVM jest nieco trudny, ponieważ są one nieco wrogie dla siebie

Może to być również Twoja wersja valgrind i java Uruchomiłem twoje polecenie z góry lokalnie i nie miałem problemów, używając Valgrind 3.6.1 i obu java 1.6 .0_26 i Java 1.7.0-b147

12

musisz wyłączyć JIT uruchomić JVM pod valgrind, tak:

valgrind java -Djava.compiler=NONE ... 

Ponadto, jeśli kończy się za pomocą wygenerowanych stłumienia (i najprawdopodobniej będzie!), może występować problem z głębokością stosów wywołań w generowanych tłumieniach, co jest bardziej prawdopodobne, gdy działa pod maszyną JVM.

W najnowszych wersjach valgrind wygenerowane suppressions mogą zawierać głębsze stosy wywołań niż mogą być przetwarzane przez valgrind/memcheck. Symptomem tego problemu jest to, że valgrind kończy się nieoczekiwanie komunikatem "zbyt wielu wywołujących w ślad stosu".

Ten problem jest łatwo ustalony: przed valgrind budowania, edycji plików coregrind/m_errormgr.c i zmienić wartość zakodowane w #define do większej wartości (ja używam 99):

/* Max liczba dzwoniących dla kontekstu w supresji. */

#define VG_MAX_SUPP_CALLERS 99 

Następnie zbuduj i zainstaluj valgrind zgodnie z dokumentacją.

+1

W najnowszym limicie dzwoniącym Valgrind jest ustawiony na 500. –