Saat menggunakan debugger Java di Intellij, apa artinya "Drop Frame"?

94

Saya menggunakan Java debugger dalam Intellij 8 dan melihat tombol berlabel "drop frame", apakah ada yang tahu tujuan ini? Bagaimana / mengapa ini digunakan / berguna?

benstpierre
sumber

Jawaban:

128

Tumpukan panggilan aplikasi Anda dapat dilihat di debugger. Dengan menggunakan fungsionalitas "Drop Frame", Anda dapat "kembali" ke frame tumpukan sebelumnya, dalam arti kembali ke masa lalu. Ini dapat membantu untuk memasukkan kembali fungsi jika Anda melewatkan titik kritis yang ingin Anda lihat lagi.

Seperti yang disarankan oleh nama "Stack Frame", perubahan yang telah dilakukan ke status global (seperti variabel statis, perubahan nilai kolom, dan sejenisnya) tidak akan dibatalkan, hanya variabel lokal yang disetel ulang. Ini dapat mengarah ke jalur eksekusi yang berbeda dari yang awalnya mengarah ke break point Anda. Anda perlu menyadari hal ini - Saya sering menganggapnya sebagai fitur yang berguna untuk menjelajahi berbagai jalur eksekusi tanpa harus memulai ulang aplikasi atau proses panjang tertentu yang mengarah ke tumpukan saat ini. Dikombinasikan dengan perubahan nilai variabel yang juga tersedia melalui debugger, Anda dapat melakukan segala macam hal menarik.

Harap dicatat, bahwa tentu saja, setiap efek samping yang mungkin terjadi - misalnya lalu lintas jaringan, manipulasi file, keluaran konsol, dll. - tidak dapat diputar ulang.

Daniel Schneller
sumber
14

Drop Frame dalam debugger memunculkan frame stack saat ini dan mengembalikan kontrol ke metode panggilan, menyetel ulang variabel lokal apa pun. Ini sangat berguna untuk berulang kali melangkah melalui suatu fungsi, tetapi berhati-hatilah: mutasi bidang atau perubahan status global akan tetap ada.

Lihat info selengkapnya di sini .

Jorge Ferreira
sumber
7

Menghapus frame dari tumpukan menggunakan debugger pada dasarnya memungkinkan Anda "memundurkan" eksekusi aplikasi Anda untuk mencapai keadaan sebelumnya. Variabel di luar bingkai tumpukan tidak dikembalikan.

Sebagai catatan tambahan, saya yakin fitur ini disebut "Drop to Frame" di Eclipse, tetapi memiliki tujuan yang sama.

Dolph
sumber