Đính kèm trình gỡ lỗi IntelliJ IDEA vào một quy trình Java đang chạy


237

Có thể đính kèm trình gỡ lỗi IntelliJ IDEA vào một quy trình Java đang chạy không? Nếu có, làm thế nào?


3
Tất nhiên. Bạn cần tạo cấu hình Run / Debug "Remote". Thêm tại đây
Vic

2
Ừm, các đối số dòng lệnh này CHỈ ĐỌC kể từ ngày 14.0.2. Bạn chỉ có thể chỉnh sửa một vài trong số chúng, điều này không giúp giải quyết vấn đề trong câu hỏi này. Bất kỳ ý tưởng làm thế nào để khắc phục điều này?
nuzzolilo


Câu trả lời:


372

Đúng! Đây là cách bạn thiết lập nó.

Chạy cấu hình

Tạo cấu hình chạy từ xa:

  1. Chạy -> Chỉnh sửa cấu hình ...
  2. Nhấp vào "+" ở phía trên bên trái
  3. Chọn tùy chọn "Từ xa" trong khung ngoài cùng bên trái
  4. Chọn một tên (tôi đặt tên cho tôi là "gỡ lỗi từ xa")
  5. Nhấp vào "OK" để lưu:

nhập mô tả hình ảnh ở đây

Tùy chọn JVM

Cấu hình trên cung cấp ba trường chỉ đọc. Đây là các tùy chọn yêu cầu JVM mở cổng 5005 để gỡ lỗi từ xa khi chạy ứng dụng của bạn. Thêm cái thích hợp vào các tùy chọn JVM của ứng dụng bạn đang gỡ lỗi. Một cách bạn có thể làm điều này sẽ là như vậy:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Nhưng nó phụ thuộc vào cách bạn chạy ứng dụng của bạn. Nếu bạn không chắc chắn cái nào trong ba cái áp dụng cho bạn, hãy bắt đầu với cái đầu tiên và đi xuống danh sách cho đến khi bạn tìm thấy cái nào hoạt động.

Bạn có thể thay đổi suspend=nđể suspend=ybuộc ứng dụng của mình đợi cho đến khi bạn kết nối với IntelliJ trước khi ứng dụng khởi động. Điều này rất hữu ích nếu điểm dừng bạn muốn đạt được xảy ra khi khởi động ứng dụng.

Gỡ lỗi

Khởi động ứng dụng của bạn như bình thường, sau đó trong IntelliJ chọn cấu hình mới và nhấn 'Gỡ lỗi'.

nhập mô tả hình ảnh ở đây

IntelliJ sẽ kết nối với JVM và bắt đầu gỡ lỗi từ xa.

Bây giờ bạn có thể gỡ lỗi ứng dụng bằng cách thêm các điểm dừng vào mã của bạn nếu muốn. Đầu ra của ứng dụng sẽ vẫn xuất hiện bất cứ nơi nào nó đã làm trước đó, nhưng các điểm dừng của bạn sẽ đạt được trong IntelliJ.


2
Tùy chọn "Remote" không có trong Intellij IDEA 15.0.2 của tôi trên mac os el capitan. Làm thế nào tôi có thể có được lựa chọn đó?
dùng674669

@ user674669 Tôi không chắc. Có lẽ Remotekhông có sẵn trên phiên bản cộng đồng? Tôi đang sử dụng phiên bản trả phí. Bất cứ ai với phiên bản cộng đồng có thể xác nhận?
Cory Klein

@CoryKlein Bạn có biết cách lấy đầu ra từ System.out.printlntrong IntelliJ khi gỡ lỗi từ xa không?
Don Rhummy

1
@DonRhummy Nếu bạn tìm ra cách, tôi rất vui khi thêm thông tin đó vào câu trả lời này, nhưng AFAIK IntelliJ hiện không hỗ trợ cho thiết bị xuất chuẩn và thiết bị xuất chuẩn từ ứng dụng từ xa trở lại IntelliJ.
Cory Klein

Nếu máy chủ từ xa chỉ có thể truy cập qua ssh, làm thế nào để chúng tôi chỉ định tệp chính?
vach

44

Điều đó là có thể, nhưng bạn phải thêm một số cờ JVM khi bạn khởi động ứng dụng của mình.

Bạn phải thêm cấu hình gỡ lỗi từ xa: Chỉnh sửa cấu hình -> Remote.

Sau đó, bạn sẽ tìm thấy trong các tham số cửa sổ hiển thị mà bạn phải thêm vào để thực hiện chương trình, như:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

Sau đó, khi ứng dụng của bạn được khởi chạy, bạn có thể đính kèm trình gỡ lỗi của mình. Nếu bạn muốn ứng dụng của mình đợi cho đến khi trình gỡ lỗi được kết nối, chỉ cần thay đổi cờ treo thành y ( suspend=y)


Nó làm tôi bối rối khi bạn chỉnh sửa các đầu vào bên dưới và sau đó cập nhật các chuỗi tùy chọn ở trên (ít nhất là trong 13.1 CE.)
Carl G

7
Ừm, các đối số dòng lệnh này CHỈ ĐỌC kể từ ngày 14.0.2. Bạn có thể chỉnh sửa một vài trong số họ. Bất kỳ ý tưởng làm thế nào để khắc phục điều này?
nuzzolilo

1
Ngoài ra, bạn đang đính kèm quy trình nào bằng cách đặt các tùy chọn đó?
nuzzolilo

5
Đầu tiên làm việc cho tôi. Lưu ý cho người khác - Tôi cần chỉ định điều này trước cờ -jar.
jim

2
@Nuzzolilo, các đối số dòng lệnh được hiển thị trong ý tưởng chỉ dành cho mục đích hiển thị và do đó chúng chỉ đọc. Chúng không được thêm vào ý tưởng mà là ứng dụng java từ xa mà bạn muốn gỡ lỗi.
Ganesh Krishnan

6

trong AndroidStudio hoặc ý tưởng

  1. Cấu hình ứng dụng sẽ được gỡ lỗi, mở Chỉnh sửa cấu hình

thêm "Tùy chọn VM" Cấu hình “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” ghi nhớ "địa chỉ"

nhập mô tả hình ảnh ở đây

  1. Cấu hình Trình gỡ lỗi từ xa nếu không thoát, Nhấp vào + để thêm

chỉ định "Cổng" giống như trong "địa chỉ" Bước 1 nhập mô tả hình ảnh ở đây


6

Ngoài ra, đừng quên bạn cần thêm cờ "-Xdebug" trong ứng dụng JAVA_OPTS nếu bạn muốn kết nối trong chế độ gỡ lỗi.


0

Ngoài ra tôi sử dụng ứng dụng GUI Tomcat (trong trường hợp của tôi: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Chuyển đến tab Java :

    nhập mô tả hình ảnh ở đây

  • Đặt các thuộc tính Java của bạn, ví dụ:

    Máy ảo Java

    C: \ Tệp chương trình \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Máy ảo Java

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Tùy chọn Java :

    -Dcatalina.home = C: \ tomcat

    -Dcatalina.base = C: \ tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ log.properies

    -agentlib: jdwp = Transport = dt_socket, server = y, đình chỉ = n, địa chỉ = *: 8000

    Các tùy chọn Java 9 :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = TẤT CẢ

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.