2009-06-22 21 views
16

Java'da belirli bir iş parçacığı için bir arama izleme çıktı almanın bir yolu var mı?Arama izleme java

Yığın izi istemiyorum. Her nesne için izleme için bir dizi çağrı istiyorum. Tüm Konuda tüm nesnelerin her biri yöntem çağrısı için bir çizgi yazdırır

cevap

10

Bu tür bir eylem için kullanılabilecek btrace bulunmaktadır.

2

Runtime.traceMethodCalls(),

+0

Sun'ın hotspot vm alabilirsiniz. Okuduğum 'java_g' ile java hata ayıklaması çalıştırmam gerekiyor. Herhangi bir fikir? – JavaRocky

+0

Evet, benim için 'Runtime.getRuntime(). TraceMethodCalls (true); 'ayrıca hiçbir şey yapmaz. Cevabları javac veya java'ya iletmem gerekiyor mu? –

+0

Yine de "1.8.0_111" java sürümünde değil –

2

Temelde yönü geçerli iş parçacığı olması gerekiyordu belirleyebilecek çeşit, boy yönelimli programlama istediğiniz ediyorum çağrıları kaydetme. (Alternatif açıkça acı verici olurdu her yöntemde kendiniz de günlüğünü koymaktır.)

(Bahar elbette AOP çok daha fazla olduğu) bu tür AspectJ ve Spring olarak Java AOP çerçeveler bol vardır.

Sistemdeki her bir yöntemini kullanarak yönteminin yönünü görmek zor olabilir ... AspectJ ile herhangi bir deneyimim yok, ancak Spring AOP temel olarak bileşenlerin etrafında AOP'yi etkinleştirmek için tasarlanmıştır. Bahar için etkili bir şekilde bilinmeyen sınıflar kolaylıkla değiştirilemez. Aklınıza takılmayın, Spring AOP bile kullandığımdan beri bir süre geçti - o zamandan beri işler gelebilir :)

2

Yeni bir Throwable nesnesi oluşturabiliriz. Ve bazı dize manipülasyonları kullanarak, çağrı yığınını alabiliriz.

Throwable t = new Throwable(); 
System.out.println(t.getStackTrace()[1].toString()); 

Bilgiyi bu şekilde aldığınızdan emin değilim, iyi bir uygulama ya da değil.

+1

Ağrısal olarak yavaş yavaş, bu yüzden hata ayıklama sırasında yerel izleme için kullanılmak üzere. – glmxndr

13

Bence bunu ilginç bulabilirsin. Çıktının günlüğe kaydedilmesi için slf4j çerçevesini kullanarak, giriş ve çıkış kayıtlarını yöntemlere ekleyen bir java ajanıdır. Sonra sadece ilgilendiğiniz bu iş parçacığı yazdırmak için günlük çerçevesini yapılandırılması meselesidir

http://www.slf4j.org/extensions.html#javaagent

(sadece açık olmak: 1). Ben 2) benim için çalışıyor, yazdım :))

+1

WOW. Zihin = Üflemeli! – JavaRocky

+0

kesinlikle harika! denedim ve harika çalıştı :) Bu çok yararlı uzantı için teşekkürler! – stratwine

+0

Android projelerinde bunu nasıl kullanabilirim? – RegisteredUser

3

Java kodunuzun yürütülmesini izlemek isterseniz, InTrace adlı bir araç kullanabilirsiniz.

NOT: InTrace, yazdığım ücretsiz ve açık kaynak bir araçtır. Btrace daha kolay bir yolu HouseMD kullanıyor

1

, çıkışa iz yöntemi çağrıları görünmüyor pencerelerde here