Java'da Nesne oluşturmayı izlemek için ASM kullanıyorum. Şu anda, newObjectReference bir kopyasını çoğaltmak içinMonitör Nesnesi Oluşturma Java'da ASM kullanarak
dup;
invoke XXX.init;
call_my_method(Object)
My fikrine
invoke XXX.init
yeni nesne ve enstrüman bir program oluşturulması göstergesi olarak init çağrısı olduğu alıp Bu nesnenin init sonra, bu nesneyi tutmak için yöntemimi çağırırım. Bir iplik örneği varsa
java.lang.VerifyError, Expecting to find unitialized object on stack.
kullandığım
"-noverify" seçeneği, çalışma sırasında, ikinci bir özel durum:Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at test.ThreadTest.test
Ancak, çalışma sırasında, bir istisna vardır
İkinci durumda, orijinal programda belirtilen bir iş parçacığının başlangıç () öğesine çağrı olmadığından emin olabilirsiniz.
Yeni Nesne Oluşturmayı izlemek için daha iyi bir yol var mı?
Çok teşekkürler.
Tahsisleri izlemek için bir bellek profiler kullanamazsınız varsayalım. Bu verilere sahip olduğunuzda, görselleştirmenin de bir yoluna ihtiyacınız var. Örneğin. http://www.yourkit.com/docs/11/help/allocations.jsp –
'call_my_method (Object)' için kullandığınız tam bytecode komutunu sağlayabilir misiniz? – vijay
Yorumlar için teşekkür ederiz. Bir hata yaptım. 'Init' in tek argümanı yeni yaratılan nesne olduğunu varsaydım, bu yüzden 'dup' kullanmak 'init' den sonra bu nesneyi ziyaret edebilir. Bununla birlikte, 'init' ten hemen önce, yeni yaratılan nesneyi 'başlatmak' için kullanılan argümanın başka bir nesnesi olabileceğini buldum. Bu yüzden iki istisnayı aştım.Bu, 'Thread t = new Thread (yeni ARunnableClass())' veya diğer benzer nesne oluşturma yöntemlerinin bytecode'unda doğrulanabilir. Nesne oluşturmayı izlemek için bazı alternatif yollar bulmalıyım. –