2014-07-07 23 views
18

Używam VisualVM do profilowania prostej aplikacji Java. Po dwukrotnym kliknięciu metody w okienku profilowania (mając nadzieję na uzyskanie bardziej szczegółowych informacji), pojawia się komunikat "Brak źródła dla klasy ....". Wiem, gdzie jest źródło. Jak mogę powiedzieć VisualVM, gdzie szukać?Jak mogę powiedzieć visualvm, gdzie znaleźć mój kod źródłowy?

+0

tylko przypuszczenie, ale co, jeśli umieścić pliki .java obok .class plików na ścieżce klasy? A jeśli są w słoiku, połącz źródło i klasy, aby były obok siebie. –

+0

Próbowałem dodać pliki .java do mojego głównego pliku .jar obok plików .class, ale to nie pomogło. –

Odpowiedz

5

Zrobiłem zrzut stosu procesu VisualVM podczas wyświetlania tego okna dialogowego błędu i wydaje się, że problem leży w klasie org.netbeans.modules.profiler.api.GoToSource, w metodzie openSourceImpl.

Ta metoda próbuje załadować źródło przy użyciu dowolnej zarejestrowanej implementacji interfejsu dostawcy usług GoToSourceProvider i wyświetla komunikat o błędzie, jeśli żadnemu z nich nie uda się wyświetlić kodu źródłowego.

Domyślam się, że obecna, domyślna wersja VisualVM nie ma zarejestrowanego GoToSourceProviders, a zatem zawsze nie uda się wyszukać kodu źródłowego.

Z nazwy pakietu wynika, że ​​GoToSourceProvider jest SPI dla modułu profilera, ale nie udało mi się znaleźć żadnej dokumentacji dotyczącej implementacji tego interfejsu SPI i nie wydaje się być częścią VisualVM punkty rozszerzenia.

+0

Szkoda, że ​​nie możemy całkowicie sprofilować kodu Java w VisualVM !!! – ady

+1

Wygląda na to, że jest to niedopatrzenie podczas wycinania profilera z Netbeans, aby uzyskać samodzielną VisualVM. –

0

Witam, coś takiego praktycznie jak VisualVM jest zaimplementowane w NetBeans IDE (używam wersji 8.0.2). Po prostu kliknij Profile->Project Profile. Po kliknięciu wyświetla się kod źródłowy. Ale niestety nie ma bardziej szczegółowych informacji, które linie kodu zajmują najwięcej czasu.

Do tego będę modyfikować kod i będę liczyć ręcznie za pomocą

long beg = System.nanoTime() 
lineISuspect 
sum += System.nanoTime() - beg; 
Powiązane problemy