Tôi biết có một số JAVA_OPTS để thiết lập để gỡ lỗi từ xa một chương trình Java.Tùy chọn dòng lệnh Java nào được đặt để cho phép JVM được gỡ lỗi từ xa?
Chúng là gì và chúng có ý nghĩa gì?
Tôi biết có một số JAVA_OPTS để thiết lập để gỡ lỗi từ xa một chương trình Java.Tùy chọn dòng lệnh Java nào được đặt để cho phép JVM được gỡ lỗi từ xa?
Chúng là gì và chúng có ý nghĩa gì?
Tôi có this article được đánh dấu trang trên thiết lập này với Eclipse cho Java 5 trở xuống.
Về cơ bản run it with:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
Đối với Eclipse với Java 5 and above, chạy nó với:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044
Trước Java 5.0, sử dụng -Xdebug
và -Xrunjdwp
đối số. Các tùy chọn này sẽ vẫn hoạt động trong các phiên bản sau, nhưng nó sẽ chạy ở chế độ diễn giải thay vì JIT, sẽ chậm hơn.
Từ Java 5.0, nó là tốt hơn để sử dụng tùy chọn -agentlib:jdwp
duy nhất:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044
Options trên -Xrunjdwp
hoặc agentlib:jdwp
lập luận là:
transport=dt_socket
: là cách sử dụng để kết nối với JVM (socket là một lựa chọn tốt, nó có thể được sử dụng để gỡ lỗi một máy tính ở xa)address=8000
: Cổng TCP/IP tiếp xúc, để kết nối từ trình gỡ lỗi,suspend=y
: nếu 'y', yêu cầu JVM đợi cho đến khi trình gỡ lỗi được đính kèm để bắt đầu thực thi, nếu không (nếu 'n'), bắt đầu thực hiện ngay lập tức.Đối với java 1.5 trở lên:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Đối với java 1.4:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Đối với java 1.3:
java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Dưới đây là kết quả từ một chương trình đơn giản:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled
Có rất nhiều vấn đề môi trường nếu bạn đang sử dụng Maven. Vì vậy, nếu bạn bắt đầu chương trình của bạn từ maven, chỉ cần chạy lệnh mvnDebug
thay cho mvn
và đính kèm trình gỡ lỗi vào cổng 8000. Bạn sẽ xử lý mọi vấn đề môi trường.
Vì Java 9.0 JDWP chỉ hỗ trợ kết nối cục bộ theo mặc định. http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435
Đối gỡ lỗi từ xa ta nên chạy chương trình với *:
tại địa chỉ:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
của bạn là chính xác đúng .. Tôi đã thử với ** - Xdebug ** và ** - ** Xrunjdwp nhưng Nó didn' t làm việc. khi tôi đã thử với ** - Xrunjdwp ** hoặc ** agentlib: jdwp ** Nó đang hoạt động.(trên Java 7) – RoboAlex
Điều này chỉ làm việc cho tôi khi tôi đặt dấu ngoặc kép xung quanh nó, nếu không tôi nhận được lỗi này: L ERI: JDWP Máy chủ không vận chuyển dt_socket server = y suspend = y address = 8000 phải có địa chỉ kết nối được chỉ định thông qua ' address = 'option – Ring
Có phải 'Xrunjdwp' không được chấp nhận (hoặc bị xóa?) tại sao chúng ta chọn' agentlib: jdwp' trên nó? – ArtOfWarfare