Bisakah saya mencari tahu nilai pengembalian sebelum kembali saat debugging di Intellij?

127

Dengan:

Object method(){
    ...
    return /* some complex expression */
}

Apakah ada cara saya bisa melihat nilai apa yang akan dikembalikan saat debugging? Seperti entah bagaimana mengatur breakpoint yang akan mengenai tepat setelah kembali, tetapi sebelum eksekusi pergi ke kode panggilan? Saya ingin dapat mengetahui apa nilai kembali dan juga dapat melihat nilai apa dari semua variabel lokal.

Cara saya lakukan sekarang adalah dengan membuat variabel sementara: Object ret = /* something complex */; return ret;. Tapi itu merepotkan dan juga menambahkan baris kode tambahan yang tidak perlu.

Catatan: Ini adalah pertanyaan yang sama dengan saya dapat mengetahui nilai kembali sebelum kembali saat debugging di Visual Studio , tetapi untuk intellij.

Kyle
sumber

Jawaban:

31

Tampaknya ada beberapa cara Anda bisa melakukan ini. Yang pertama melibatkan pengaturan breakpoint pada metode signature, dalam kasus Anda, Anda akan menyiapkan breakpoint pada metode Object () {. Ini akan memungkinkan Anda untuk mengawasi masuk dan keluarnya metode ini. Saya percaya Anda harus menggunakan ini dalam hubungannya dengan " Nilai pengembalian metode menonton" seperti yang dinyatakan di atas, tetapi saya belum dapat sepenuhnya menguji ini karena terlalu lama untuk dihitung. Hati-hati, ini memang secara dramatis mengurangi kinerja debugger dan akan membutuhkan waktu lebih lama untuk debug.

Anda juga dapat melakukan hal berikut secara manual.

  1. Siapkan breakpoint pada baris kembali.
  2. Ketika garis kembali terkena, klik pada garis kembali, secara khusus letakkan kursor pada operasi yang ingin Anda lihat, kemudian pergi ke Run-> Evaluate Expression (atau Alt-F8) dan itu harus menjalankan ekspresi pada titik itu dan kembalikan apa yang dikembalikan.

Catatan : Jika Anda membuat breakpoint, ada banyak hal yang dapat Anda sampaikan kepada IDEA tentang hal itu, seperti jika Anda break pada breakpoint, Anda dapat memberitahu mereka untuk melakukan ekspresi dan mencatatnya. Anda dapat melihat-lihat dengan apa yang dapat Anda lakukan jika Anda mengklik kanan pada breakpoint dan mengklik properti.

UPDATE : Coba ini bersamaan dengan cara pertama melakukannya. Jangan gunakan "Perhatikan nilai pengembalian metode" karena sepertinya memperlambat atau menghentikan sesi debug. Alih-alih lakukan hal berikut

  1. Klik kanan pada ekspresi balik yang ingin Anda lihat dan klik "Tambahkan ke Arloji"
  2. Selanjutnya tambahkan metode breakpoint seperti yang dinyatakan di atas.
  3. Debug program Anda dan metode Anda akan merusak tanda tangan metode.
  4. Tekan tombol F9 untuk melanjutkan dan itu akan rusak lagi SETELAH ekspresi kembali telah dihitung dan ekspresi kembali Anda harus di kolom arloji.

Ingat bahwa breakpoint metode lebih lambat sehingga mungkin membutuhkan lebih banyak waktu, cara rumit untuk meningkatkan ini jika Anda memperhatikan terlalu banyak hit kinerja adalah dengan hanya menetapkan breakpoint pernyataan pengembalian (tanpa memiliki breakpoint metode) dan kemudian menambahkan breakpoint metode SETELAH klik kembali pernyataan breakpoint dan kemudian melanjutkan.

Semoga ini membantu,

jluzwick
sumber
1
Sebenarnya, setelah Anda menambahkan breakpoint dan arloji ke (X baru ()), maka Anda cukup melakukan Alt + F8 pada arloji itu untuk 'menganalisis' objek yang dikembalikan. Ini sangat berguna.
Kedar Mhaswade
Jika saya memahami ini dengan benar, solusi yang diusulkan di sini hanya berfungsi jika ekspresi tidak memiliki efek samping. Saya pasti tidak merekomendasikan menempatkan ekspresi rumit di jendela variabel / menonton secara umum.
Mashmagar
Sejak setidaknya 2016.3, ada cara yang jauh lebih baik. Lihat jawaban dari Birchlabs untuk detailnya. Sekarang seharusnya jawaban itu diterima.
Mikezx6r
150

Pada IntelliJ IDEA 2016.3: tersembunyi di dalam tombol roda pada panel debug. Pastikan Show Method Return Valuesyang diperiksa .

IntelliJ IDEA 2016.3 "Tampilkan Metode Pengembalian Nilai"

Gunakan debugger untuk memecah suatu tempat di dalam dalam fungsi yang nilai pengembaliannya ingin Anda lihat.

melangkah ke fungsi

Langkah keluar dari fungsi (atau melangkahi sampai Anda keluar):

melangkah keluar

Perhatikan bahwa nilai pengembalian muncul di variabel Anda:

amati nilai kembali

Birchlabs
sumber
3
@Stan Saya sudah memperbarui jawaban saya untuk memberikan contoh yang berfungsi.
Birchlabs
40

Ada tombol Watch mengembalikan nilai yang tersedia di panel debugger .

Tonton nilai pengembalian metode : Klik tombol ini untuk menonton nilai pengembalian metode yang terakhir dieksekusi.

nilai metode menonton kembali

Konfigurasi IDEA 12:

IDE 12

CrazyCoder
sumber
2
Tampaknya tidak ada yang muncul di tab "Variabel" atau "Arloji". Saya menggunakan Groovy jika itu penting. Juga, ini sepertinya akan menunjukkan nilai balik dari metode terakhir yang dieksekusi dari konteks kode panggilan, bukan dari konteks metode itu sendiri. Perbedaan penting dari ini adalah bahwa jika Anda dapat melihatnya dari konteks metode itu sendiri, Anda juga dapat melihat nilai-nilai variabel lokal metode tersebut. Ini dapat memungkinkan Anda untuk melihat apa yang salah jika metode mengembalikan nilai yang salah.
Kyle
3
Ini menunjukkan nilai kembali di panel "Variabel" (menggunakan nama metode yang sepenuhnya memenuhi syarat). Ini seharusnya jawaban yang diterima. @CrazyCoder +1 dari saya :-)
Omri Spector
4
@CrazyCoder: Apakah fitur ini masih ada untuk IDEA 13? Saya tidak dapat menemukannya.
kevinarpe
1
Saya menggunakan Intellij 15 dan tidak melihat ini juga. Bisakah Anda memposting tangkapan layar?
Sanjiv Jivan
3
pada Jan 2017 (Idea 2016.3.2): Anda harus mengklik ikon Pengaturan (roda gigi, tepat di atas item menu kuning pada gambar ke-2), sebuah menu menunjukkan yang menyertakan "Tampilkan Metode Pengembalian Nilai". Tidak perlu me-restart apa pun: setelah kembali dari metode, ObjectClassName.methodName () -nya muncul di tampilan Variabel tepat di bawah ini .
18446744073709551615
1

Ini ditanya beberapa waktu yang lalu, tetapi saya menggunakan metode yang berbeda ketika saya ingin menangani situasi ini.

Saat debugging, Anda dapat menandai ekspresi (dalam kasus Anda, ekspresi tepat setelah "kembali") dan tekan CTRL + ALT + F8 (Ekspresi Evaluasi Cepat). IntelliJ akan memunculkan jendela kecil yang menunjukkan kepada Anda nilai yang akan dikembalikan.

unlimitednzt
sumber
2
Jika Anda menggunakan chip grafis Intel pintasan keyboard ini akan mematikan monitor sekunder Anda .
Coli
1
Pengguna Linux: Ctrl + Alt + F8 - Akan mengirim pengguna ke Terminal GUI kedua. Di Ubuntu saya menekan Ctrl + Alt + F2 untuk kembali.
Dmitriy Pavlukhin