Apakah mungkin untuk melihat nilai kembali dari suatu metode setelah baris dijalankan dan sebelum penunjuk instruksi kembali ke fungsi pemanggil?
Saya men-debug kode yang tidak dapat saya ubah (baca: tidak ingin mengkompilasi ulang pustaka pihak ketiga) , dan terkadang melompat ke kode yang tidak saya miliki sumbernya atau ekspresi balik memiliki efek samping yang menghentikan saya. dapat menjalankan ekspresi di tab Tampilan .
Seringkali nilai yang dikembalikan digunakan dalam pernyataan gabungan, sehingga tampilan Variabel tidak akan pernah menunjukkan nilai kepada saya (karena itu ingin melihat hasil sebelum kontrol kembali ke fungsi pemanggil).
PEMBARUAN: Saya tidak dapat menggunakan penampil ekspresi karena ada efek samping dalam pernyataan tersebut.
sumber
Jawaban:
Fitur ini ditambahkan ke Eclipse versi 4.7 M2 di bawah Eclipse bug 40912 .
Untuk menggunakannya:
return
pernyataan (menggunakan "Step Over" atau "Step Return")Lihat Eclipse Project Oxygen (4.7) M2 - Baru dan Patut Disimak untuk detailnya.
sumber
Menemukan jalan pintas yang sangat bagus untuk ini. Pilih ekspresi yang mengembalikan nilai dan tekan
Ini akan menampilkan nilai pernyataan pengembalian. Ini sangat membantu jika Anda tidak bisa atau tidak ingin mengubah hanya untuk tujuan debugging.
Semoga ini membantu.
Catatan: Belum menguji ini dengan pustaka pihak ketiga, tetapi berfungsi dengan baik untuk kode saya. Menguji ini di Eclipse Java EE IDE untuk Pengembang Web. Versi: Juno Service Release 1
sumber
Ctrl + Shift + I
juga membantu saya.return System.currentTimeMillis();
, Anda akan mendapatkan hasil yang berbeda dari fungsi yang sebenarnya dikembalikan!Apple machine
?Ini sebenarnya adalah bug yang sudah lama ada di Eclipse, sejak hari-hari pertama IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
sumber
Itulah mengapa saya selalu berpegang pada pola metode berikut:
Aturan saya:
Secara alami, pengambil yang paling sepele dikecualikan.
sumber
Saya juga penasaran untuk mempelajari jawaban atas pertanyaan ini.
Dulu, ketika berurusan dengan pustaka pihak ke-3 seperti itu, yang saya lakukan adalah membuat kelas pembungkus atau kelas anak yang mendelegasikan ke kelas induk dan melakukan debug di kelas pembungkus / anak. Ini membutuhkan kerja ekstra.
sumber
"Sekarang ketika Anda kembali dari metode, di metode atas, dalam tampilan variabel itu menunjukkan nilai kembali dari panggilan selesai sebelumnya" [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
sumber
Yang sulit. Pengalaman saya, di luar Eclipse, adalah bahwa jika Anda mungkin perlu melihat nilai yang dikembalikan, yang terbaik adalah menugaskannya ke variabel lokal dalam fungsi sehingga pernyataan pengembaliannya sederhana
return varname;
dan tidakreturn(some * expression || other);
. Namun, itu tidak terlalu membantu Anda karena Anda mengatakan Anda tidak dapat (atau tidak ingin) mengubah atau bahkan mengkompilasi ulang kode. Jadi, saya tidak punya jawaban yang bagus untuk Anda - mungkin Anda perlu mempertimbangkan kembali kebutuhan Anda.sumber
Bergantung pada pernyataan pengembalian, Anda dapat menyorot ekspresi yang dikembalikan dan dari menu klik kanan, seharusnya ada sesuatu seperti "evaluasi ekspresi" (Saya tidak memiliki gerhana di depan saya sekarang, tapi seperti itu ). Ini akan menunjukkan kepada Anda apa yang akan dikembalikan.
sumber
Ini agak dibuat-buat, tetapi sepertinya tidak ada cara yang sederhana:
Anda dapat menggunakan AspectJ untuk melengkapi JAR dengan aspek-aspek yang mendapatkan nilai kembalian dari metode yang Anda minati. Menurut dokumentasi Eclipse, program AspectJ dapat di- debug seperti program lain.
Ada dua opsi untuk menenun kelas Anda tanpa mengompilasi ulang perpustakaan:
Tenun pasca-kompilasi jika pemrosesan JAR biner dapat diterima;
Penenunan waktu muat, yang membutuhkan pengaktifan agen penenun di VM.
Lihat dokumentasi gerhana (tautan di atas) dan juga Panduan Lingkungan Pengembangan AspectJ .
sumber