Sự khác biệt giữa Step Into và Step Over trong trình gỡ lỗi Eclipse là gì?


194

Tôi muốn gỡ lỗi toàn bộ dòng chương trình Java. Sự khác biệt giữa F5(bước vào) và F6(bước qua) trong nhật thực là gì?


FWIW logic tương tự của bước qua / bước áp dụng cho Xcode / Swift
Mật ong

Câu trả lời:


270

Xem xét đoạn mã sau với con trỏ lệnh hiện tại của bạn (dòng sẽ được thực thi tiếp theo, được chỉ định bởi ->) tại f(x)dòng trong g(), đã được gọi bởi g(2)dòng trong 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
    }
}

Nếu bạn bước vào thời điểm đó, bạn sẽ di chuyển đến println()dòng trong f(), bước vào lệnh gọi hàm.

Nếu bạn đã bước qua tại thời điểm đó, bạn sẽ di chuyển đến f(1)dòng trong g(), bước qua lệnh gọi hàm.

Một tính năng hữu ích khác của trình gỡ lỗi là bước ra hoặc bước trở lại. Trong trường hợp đó, một bước hoàn trả về cơ bản sẽ đưa bạn qua chức năng hiện tại cho đến khi bạn quay trở lại một cấp. Nói cách khác, nó sẽ bước qua f(x)f(1), sau đó sao lưu ra các chức năng gọi kết thúc ở g(3)trong main().

Nhật thực (ít nhất là Europa, là thứ duy nhất tôi có sẵn tại thời điểm này) sử dụng F5cho step into, F6cho step overF7cho step return.


1
"sau đó quay trở lại chức năng gọi điện để kết thúc tại g(3); trong main()" <- Bạn có cho rằng bạn đã đến vị trí hiện tại của mình từ đó g(2)và một khi bạn đã hoàn tất, bạn quay lại dòng tiếp theo g(3)?
Mật ong

1
@Honey, vâng, có một sự mơ hồ ở đó (cho dù cuộc gọi g(2)hoặc g(3)hiện đang hoạt động) vì vậy tôi đã xóa nó trong đoạn đầu tiên. Cảm ơn cho những người đứng đầu lên.
paxdiablo

144

Khi gỡ lỗi các dòng mã, đây là các tình huống thông thường:

  • ( Bước vào ) Một phương thức sắp được gọi và bạn muốn gỡ lỗi thành mã của phương thức đó, vì vậy bước tiếp theo là đi vào phương thức đó và tiếp tục gỡ lỗi từng bước.
  • ( Bước qua ) Một phương thức sắp được gọi, nhưng bạn không quan tâm đến việc gỡ lỗi lời gọi cụ thể này, vì vậy bạn muốn trình gỡ lỗi thực hiện hoàn toàn phương thức đó như một bước.
  • ( Trả về từng bước ) Bạn đã hoàn tất việc gỡ lỗi phương thức này từng bước và bạn chỉ muốn trình gỡ lỗi chạy toàn bộ phương thức cho đến khi nó trả về toàn bộ một bước.
  • ( Tiếp tục ) Bạn muốn trình gỡ lỗi tiếp tục thực hiện "bình thường" thay vì từng bước
  • ( Điểm dừng dòng ) Bạn không quan tâm làm thế nào nó đạt được điều đó, nhưng nếu việc thực thi đạt đến một dòng mã cụ thể, bạn muốn trình gỡ lỗi tạm thời tạm dừng thực thi ở đó để bạn có thể quyết định phải làm gì.

Eclipse có các tính năng sửa lỗi nâng cao khác, nhưng đây là những nguyên tắc cơ bản.

Xem thêm


22

bước vào sẽ đào sâu vào các cuộc gọi phương thức
bước qua sẽ chỉ thực hiện dòng và đi đến cái tiếp theo


1
Thế còn "bước ra"?
Koray Tugay

5

Bạn không thể xem chi tiết về phương pháp bằng cách sử dụng bước trên. Nếu bạn muốn bỏ qua dòng hiện tại, bạn có thể sử dụng bước qua, sau đó bạn chỉ cần nhấn F6một lần duy nhất để chuyển sang dòng tiếp theo. Và nếu bạn nghĩ rằng đôi khi có sai trong phương pháp, hãy sử dụng F5để kiểm tra các chi tiết.


Vì vậy, nếu tôi thực hiện từng bước và nếu chức năng có chứa một số câu lệnh in thì việc in ấn có xảy ra hay không?
tên người

2

Bước vào Biểu thức tiếp theo trên dòng hiện được chọn sẽ được thực thi và lệnh thực thi bị đình chỉ ở dòng thực thi tiếp theo trong phương thức được gọi.

Bước qua Dòng được chọn hiện tại được thực thi và tạm dừng trên dòng thực thi tiếp theo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.