Tôi có thể tìm ra giá trị trả về trước khi quay lại trong khi gỡ lỗi trong Intellij không?


126

Với:

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

Có cách nào để tôi có thể thấy giá trị nào sẽ được trả về trong khi gỡ lỗi không? Giống như bằng cách nào đó thiết lập một điểm dừng sẽ được nhấn ngay sau khi trả về, nhưng trước khi thực hiện đi đến mã gọi? Tôi muốn có thể biết giá trị trả về là gì và cũng có thể xem giá trị nào của tất cả các biến cục bộ là gì.

Cách tôi làm bây giờ là bằng cách tạo một biến tạm thời : Object ret = /* something complex */; return ret;. Nhưng đó là một rắc rối và cũng thêm một dòng mã không cần thiết.

Lưu ý: Đây là câu hỏi tương tự như Tôi có thể tìm ra giá trị trả về trước khi quay lại trong khi gỡ lỗi trong Visual Studio , nhưng đối với intellij.

Câu trả lời:


31

Dường như có một vài cách bạn có thể làm điều này. Cách thứ nhất liên quan đến việc thiết lập điểm dừng trên chữ ký phương thức, trong trường hợp của bạn, bạn sẽ thiết lập điểm dừng trên phương thức Object () {. Điều này sẽ cho phép bạn xem lối vào và lối ra của phương thức. Tôi tin rằng bạn phải sử dụng kết hợp với " Giá trị trả về của phương thức đồng hồ" như đã nêu ở trên, nhưng tôi chưa thể kiểm tra hoàn toàn điều này vì mất quá nhiều thời gian để tính toán. Coi chừng, điều này làm giảm đáng kể hiệu năng của trình gỡ lỗi và sẽ mất nhiều thời gian hơn để gỡ lỗi.

Ngoài ra, bạn có thể làm như sau bằng tay.

  1. Thiết lập điểm dừng trên đường trở về.
  2. Khi dòng trả về được nhấn, hãy nhấp vào dòng trả về, cụ thể đặt con trỏ vào thao tác bạn muốn xem, sau đó đi đến Chạy-> Đánh giá biểu thức (hoặc Alt-F8) và nó sẽ chạy biểu thức tại điểm đó và trả lại những gì nó trở lại.

Lưu ý : Nếu bạn tạo một điểm dừng, có rất nhiều điều bạn có thể yêu cầu IDEA thực hiện với chúng, chẳng hạn như nếu bạn phá vỡ điểm dừng, bạn có thể bảo họ thực hiện biểu thức và ghi nhật ký. Bạn có thể nhìn xung quanh với những gì bạn có thể làm nếu bạn nhấp chuột phải vào điểm dừng và nhấp vào thuộc tính.

CẬP NHẬT : Hãy thử điều này kết hợp với cách đầu tiên để làm điều đó. Không sử dụng "Giá trị trả về của phương thức" vì nó dường như làm chậm hoặc đóng băng phiên gỡ lỗi. Thay vào đó hãy làm như sau

  1. Nhấp chuột phải vào biểu thức trả lại mà bạn muốn xem và nhấp vào "Thêm vào đồng hồ"
  2. Tiếp theo thêm một điểm dừng phương thức như đã nêu ở trên.
  3. Gỡ lỗi chương trình của bạn và phương thức của bạn sẽ phá vỡ chữ ký phương thức.
  4. Nhấn phím F9 để tiếp tục và nó sẽ ngắt một lần nữa SAU biểu thức trả về đã được tính toán và biểu thức trả về của bạn phải ở trong cột đồng hồ.

Hãy nhớ rằng các điểm dừng phương thức chậm hơn nên có thể mất nhiều thời gian hơn, một cách khó để cải thiện điều này nếu bạn nhận thấy quá nhiều lần nhấn hiệu suất là chỉ cần đặt điểm dừng câu lệnh trả về (không có điểm dừng phương thức) và sau đó thêm điểm dừng phương thức SAU các điểm dừng tuyên bố trở lại nhấn và sau đó tiếp tục.

Hi vọng điêu nay co ich,


1
Trên thực tế, khi bạn đã thêm điểm dừng và đồng hồ vào (X ()) mới, thì bạn chỉ cần thực hiện Alt + F8 trên đồng hồ đó để 'phân tích' đối tượng được trả về. Điều này thực sự hữu ích.
Kedar Mhaswade

Nếu tôi hiểu chính xác điều này, giải pháp được đề xuất ở đây chỉ hoạt động nếu biểu thức không có tác dụng phụ. Tôi chắc chắn không khuyên bạn nên đặt các biểu thức phức tạp trong cửa sổ biến / xem.
Mashmagar

Kể từ ít nhất 2016.3, có một cách tốt hơn nhiều. Xem câu trả lời từ Birchlabs để biết chi tiết. Bây giờ nó sẽ là câu trả lời được chấp nhận.
Mikezx6r

150

Trên IntelliJ IDEA 2016.3: nó ẩn bên trong nút cog của bảng gỡ lỗi. Đảm bảo Show Method Return Valuesđược kiểm tra .

IntelliJ IDEA 2016.3 "Hiển thị giá trị trả về của phương thức"

Sử dụng trình gỡ lỗi để phá vỡ một nơi nào đó bên trong hàm có giá trị trả về mà bạn muốn xem.

bước vào chức năng

Bước ra khỏi chức năng (hoặc bước qua cho đến khi bạn thoát):

bước ra khỏi

Quan sát rằng giá trị trả về xuất hiện trong các biến của bạn:

quan sát giá trị trả về


3
@Stan Tôi đã cập nhật câu trả lời của mình để cung cấp một ví dụ hoạt động.
Birchlabs

40

Có nút giá trị trả về phương thức Watch có sẵn trong bảng gỡ lỗi .

Xem giá trị trả về của phương thức : Nhấp vào nút này để xem giá trị trả về của phương thức được thực hiện cuối cùng.

xem giá trị phương thức

Cấu hình IDEA 12:

Ý TƯỞNG 12


2
Dường như không có gì hiển thị trong các tab "Biến" hoặc "Đồng hồ". Tôi đang sử dụng Groovy nếu điều đó quan trọng. Ngoài ra, điều này có vẻ như sẽ hiển thị giá trị trả về của phương thức cuối cùng được thực thi từ ngữ cảnh của mã gọi, thay vì từ ngữ cảnh của chính phương thức đó. Sự khác biệt quan trọng của điều này là nếu bạn có thể nhìn thấy nó từ ngữ cảnh của chính phương thức, bạn cũng có thể xem xét các giá trị của các biến cục bộ của phương thức. Điều này có thể cho phép bạn thấy những gì đã sai nếu phương thức trả về giá trị không chính xác.
Kyle

3
Nó hiển thị giá trị trả về trong ngăn "Biến" (sử dụng tên phương thức đủ điều kiện). Đây phải là câu trả lời được chấp nhận. @CrazyCoder +1 từ tôi :-)
Omri Spector

4
@CrazyCoder: Tính năng này có còn tồn tại cho IDEA 13 không? Tôi không thể tìm thấy nó.
kevinarpe

1
Tôi đang dùng Intellij 15 và cũng không thấy điều này. Bạn có thể gửi ảnh chụp màn hình?
Sanjiv Jivan

3
vào tháng 1 năm 2017 (Ý tưởng 2016.3.2): bạn phải nhấp vào biểu tượng Cài đặt (bánh răng, ngay phía trên mục menu màu vàng trên hình ảnh thứ 2), một menu hiển thị bao gồm "Hiển thị giá trị trả về phương thức". Không cần phải khởi động lại bất cứ điều gì: sau lần trả về tiếp theo từ một phương thức, ObjectClassName.methodName () của nó xuất hiện trong chế độ xem Biến ngay bên dưới này .
18446744073709551615

1

Điều này đã được hỏi cách đây một thời gian, nhưng tôi sử dụng một phương pháp khác khi tôi muốn xử lý tình huống này.

Khi gỡ lỗi, bạn có thể đánh dấu biểu thức (trong trường hợp của bạn, biểu thức ngay sau "trả lại") và nhấn CTRL + ALT + F8 (Đánh giá nhanh biểu thức). IntelliJ sẽ bật lên một cửa sổ nhỏ hiển thị cho bạn giá trị sẽ được trả lại.


2
Nếu bạn sử dụng chip đồ họa Intel, phím tắt này sẽ tắt màn hình bí mật của bạn .
Coli

1
Người dùng Linux: Ctrl + Alt + F8 - Sẽ gửi người dùng đến GUI GUI thứ 2. Trong Ubuntu, tôi nhấn Ctrl + Alt + F2 để quay lại.
Dmitriy Pavlukhin
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.