Apa perbedaan antara Step Into dan Step Over di Eclipse debugger?

194

Saya ingin men-debug seluruh aliran program Java. Apa perbedaan antara F5(melangkah ke) dan F6(melangkah lebih) dalam gerhana?

Pengguna Java
sumber
FWIW logika yang sama dari step over / step berlaku untuk Xcode / Swift
Honey

Jawaban:

270

Pertimbangkan kode berikut dengan penunjuk instruksi Anda saat ini (baris yang akan dieksekusi berikutnya, ditunjukkan oleh ->) di f(x)baris dalam g(), yang dipanggil oleh g(2)baris di main():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

Jika Anda melangkah ke titik itu, Anda akan pindah ke println()saluran masuk f(), masuk ke panggilan fungsi.

Jika Anda adalah untuk melangkah lebih pada saat itu, Anda akan pindah ke f(1)baris dalam g(), melangkahi fungsi panggilan.

Fitur lain yang berguna dari para pengingkar adalah langkah keluar atau langkah kembali. Dalam hal ini, langkah pengembalian pada dasarnya akan menjalankan Anda melalui fungsi saat ini sampai Anda naik satu tingkat. Dengan kata lain, itu akan melangkah f(x)dan f(1), kemudian kembali ke fungsi panggilan untuk berakhir g(3)di main().

Eclipse (setidaknya Europa, yang merupakan satu-satunya yang saya miliki saat ini) digunakan F5untuk step into, F6untuk step overdan F7untuk step return.

paxdiablo
sumber
1
"lalu kembali ke fungsi panggilan untuk berakhir di g(3); dalam main()" <- Apakah Anda mengasumsikan bahwa Anda sampai ke lokasi Anda saat ini dari g(2)dan setelah Anda semua selesai, Anda kembali ke baris berikutnya g(3)?
Sayang
1
@ Sayang, ya, ada beberapa ambiguitas di sana (apakah g(2)atau g(3)panggilan sedang aktif) jadi saya sudah membersihkannya di paragraf pertama. Terimakasih atas peringatannya.
paxdiablo
144

Saat men-debug baris kode, inilah skenario yang biasa:

  • ( Langkah Ke ) Suatu metode akan dipanggil, dan Anda ingin men-debug ke dalam kode metode itu, jadi langkah selanjutnya adalah masuk ke metode itu dan melanjutkan debugging langkah-demi-langkah.
  • ( Step Over ) Suatu metode akan dipanggil, tetapi Anda tidak tertarik untuk debugging doa khusus ini, jadi Anda ingin debugger untuk mengeksekusi metode itu sepenuhnya sebagai satu langkah penuh.
  • ( Langkah Kembali ) Anda selesai men-debug metode ini langkah demi langkah, dan Anda hanya ingin debugger untuk menjalankan seluruh metode sampai kembali sebagai satu langkah penuh.
  • ( Lanjutkan ) Anda ingin debugger untuk melanjutkan eksekusi "normal" bukan langkah demi langkah
  • ( Line Breakpoint ) Anda tidak peduli bagaimana itu sampai di sana, tetapi jika eksekusi mencapai baris kode tertentu, Anda ingin debugger untuk sementara menghentikan eksekusi di sana sehingga Anda dapat memutuskan apa yang harus dilakukan.

Eclipse memiliki fitur debugging canggih lainnya, tetapi ini adalah fundamental dasar.

Lihat juga

polygenelubricants
sumber
22

melangkah masuk akan menggali panggilan metode
melangkah lebih dari hanya akan mengeksekusi baris dan pergi ke yang berikutnya

Jean-Bernard Pellerin
sumber
1
Bagaimana dengan "keluar"?
Koray Tugay
5

Anda tidak dapat melihat detail metode dengan menggunakan langkah mundur. Jika Anda ingin melewati garis saat ini, Anda dapat menggunakan langkah, maka Anda hanya perlu menekan F6untuk hanya sekali untuk pindah ke baris berikutnya. Dan jika Anda berpikir ada sesuatu yang salah dalam metode ini, gunakan F5untuk memeriksa detailnya.

Wanana
sumber
Jadi jika saya melakukan step over dan jika fungsi berisi beberapa pernyataan cetak akankah pencetakan terjadi atau tidak?
username_4567
2

Langkah Ke Ekspresi berikutnya pada baris yang saat ini dipilih untuk dieksekusi dipanggil, dan eksekusi ditunda di baris yang dapat dieksekusi berikutnya dalam metode yang dipanggil.

Step Over Baris yang dipilih saat ini dieksekusi dan ditangguhkan pada baris yang dapat dieksekusi berikutnya.

Yogesh Yadav
sumber