2014-07-07 16 views
18

Basit bir Java uygulamasını profillemek için VisualVM çalıştırıyorum. Profil bölmesindeki bir yöntemi çift tıkladığımda (daha fazla ayrıntı elde etmeyi umuyordum), "Sınıf için kaynak bulunamadı ..." yazıyor. Kaynağın yerini biliyorum. VisualVM'ye nerede bakacağımı nasıl anlarım?Kaynak kodumu nerede bulacağımı visualvm'ye nasıl söylerim?

+0

Sadece bir tahmin kullanarak elle sayacaktır, ama ne üzerinde sınıf .class dosyaların yanındaki .java dosyalarını koyarsanız? Ya da bir kavanozdaysa, kaynağı ve sınıfları paketleyin, böylece birbirlerinin yanında olurlar. –

+0

.java dosyalarını .class dosyalarının yanı sıra ana .jar dosyasına eklemeyi denedim, ancak yardımcı olmadı. –

cevap

5

Bu hata iletişim kutusunu görüntülerken VisualVM işleminin bir yığın dökümünü aldım ve sorunun openSourceImpl yönteminde org.netbeans.modules.profiler.api.GoToSource sınıfında yer aldığı görülüyor.

Bu yöntem, kaynağı GoToSourceProvider hizmet sağlayıcısı arabiriminin kayıtlı herhangi bir uygulamasını kullanarak yüklemeye çalışır ve bunların hiçbiri söz konusu kaynak kodunu görüntülemeyi başaramazsa hata mesajını görüntüler.

Benim tahminim şu ki, VisualVM'nin varsayılan, varsayılan sürümü herhangi bir GoToSourceProviders kayıtlı değil ve bu nedenle her zaman kaynak koduna bakamayacak.

Paket adından, profil modülü için GoToSourceProvider SPI'nın göründüğü anlaşılıyor, ancak bu SPI'nın nasıl uygulanacağına ilişkin bir belge bulamadım ve VisualVM'nin bir parçası görünmüyor. uzatma noktaları.

+0

Bu java kodu VisualVM'de tam olarak izleyemediğimiz için üzücüdür! – ady

+1

Bu gibi sesler, tek başına VisualVM'yi oluşturmak için Netbeans’in profilleyiciyi keserken bir gözetimdir. –

0

VisualVM, NetBeans IDE'de (8.0.2 kullanıyorum) uygulandığı gibi hemen hemen aynı bir şeyle merhaba. Sadece Profile->Project Profile'u tıklattınız. Tıklandığında kaynak kodu size gösteriliyor. Ancak maalesef, kod satırlarının çoğu zaman aldığı daha detaylı bilgi yok. Bunun için

kodu değiştirmedim ve ben

long beg = System.nanoTime() 
lineISuspect 
sum += System.nanoTime() - beg; 
İlgili konular