Trong C#, chúng tôi có 2 chế độ để xây dựng các dự án: Debug
và Release
, tôi tự hỏi nếu Java có cùng một điều. Tôi đang sử dụng IntelliJ IDEA như Java IDE và cho đến nay tôi đã không nhìn thấy bất cứ nơi nào để cấu hình một chế độ xây dựng như trong VS IDE.Java có chế độ xây dựng 'Gỡ lỗi' và 'Phát hành' như C# không?
Trả lời
javac
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
Bạn có thể chọn bao gồm các biểu tượng gỡ lỗi trong các lớp được biên dịch (đây là mặc định) hoặc không làm như vậy. Không có nhiều lợi ích khi không làm điều đó. Các tệp jar sẽ là a little smaller, nhưng lợi ích hiệu suất là tối thiểu (nếu có). Nếu không có các ký hiệu này, bạn sẽ không còn nhận được số dòng trong các dấu vết ngăn xếp nữa. Bạn cũng có tùy chọn để bao gồm additional symbols with local variable names (theo mặc định chỉ có tên tệp nguồn và số dòng).
java
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
Bạn cũng có thể bật xác nhận tại thời gian chạy (mặc định là tắt), đôi khi hữu ích trong quá trình phát triển và thử nghiệm. Điều này có tác động hiệu suất (nếu mã được đề cập đã thực sự sử dụng các xác nhận, mà tôi nghĩ là uncommon).
Bất kể bất kỳ cài đặt nào trong số các cài đặt này, JVM luôn cho phép bạn đính kèm trình gỡ lỗi.
Java nào không có trình biên dịch có điều kiện trong đó mã hoàn toàn khác nhau sẽ được biên dịch dựa trên một số cài đặt bên ngoài. Gần nhất bạn có thể nhận được là một cái gì đó giống như public static final boolean DEBUG_BUILD = true;
một nơi nào đó trong mã của bạn và sử dụng trong các câu lệnh if. Điều này thực sự sẽ làm cho trình biên dịch loại trừ mã không thể truy cập được, nhưng bạn phải thiết lập hằng số này trong mã nguồn.
anyway để làm cho 'public static cuối cùng boolean DEBUG_BUILD' vào preprocess, một cái gì đó như' # ifdebug' trong C#? – JatSing
@JatSing: Không trực tiếp. Bạn có thể có một số loại kịch bản cập nhật giá trị trước khi bạn bắt đầu trình biên dịch. Hoặc có thể có một Constants.java và hai phiên bản của nó, và thiết lập classpath biên dịch cho một trong số chúng. Nhưng không có gì trong chuỗi công cụ chính thức. – Thilo
Bạn đang yêu cầu các loại bản dựng khác nhau để biên dịch theo những thứ khác nhau mà tôi đoán. Ví dụ để có Debug.WriteLine và Console.WriteLine.
"Không, Java không khớp chính xác với chức năng đó. Bạn có thể sử dụng các khía cạnh hoặc sử dụng vùng chứa IOC để chèn các lớp triển khai khác nhau." lấy trộm này từ những câu dưới đây: Conditional Java compilation
(đang có câu trả lời tuyệt vời khác cho bạn đó)
Đó là thực tế bình thường trong Java để giải phóng tất cả mọi thứ là một cách mà có thể được sửa lỗi. Đối với một số dự án yêu cầu obfuscation, họ có thể có một bản phát hành, nhưng tôi chưa bao giờ thấy điều này trong 12 năm phát triển Java.
Những thứ như xác nhận và thông báo gỡ lỗi thường bị tắt trong thời gian chạy cho phiên bản sản xuất nhưng có thể được bật bất cứ lúc nào (thậm chí động) nếu được yêu cầu.
IMHO là cách tốt nhất để sử dụng cùng một bản dựng trong mọi môi trường, không chỉ cùng một nguồn nhưng cùng một JAR. Điều này mang lại cho bạn cơ hội tốt nhất, nếu nó hoạt động trong thử nghiệm, nó sẽ hoạt động trong sản xuất và nếu bạn có vấn đề trong sản xuất, bạn có thể tái sản xuất nó trong thử nghiệm.
Vì có quá nhiều mã Java được viết theo cách này, JIT rất giỏi tối ưu hóa mã chết mà không bao giờ được gọi. Vì vậy, nhiều như vậy mà IMHO hầu hết các "tiêu chuẩn" vi mô nơi Java ra thực hiện C + +, là khi điểm chuẩn không làm bất cứ điều gì và JIT là tốt hơn tại phát hiện này. IMHO, C++ giả định rằng nhà phát triển đủ thông minh để không viết mã mà không làm bất cứ điều gì.
"Tôi chưa bao giờ thấy điều này trong 12 năm phát triển Java". Với tôi, đó là phần liên quan nhất của câu trả lời của bạn, khi bạn đang viết Java cho HFT (!). Điều đó có nghĩa là việc biên dịch mã Java để bao gồm tất cả thông tin gỡ lỗi có/không/can thiệp với JIT JVM không? Tôi giả sử có, nhưng tìm kiếm xác nhận. – kevinarpe
- 1. chuyển đổi mã giữa chế độ gỡ lỗi và chế độ phát hành trong java - android
- 2. Gỡ lỗi XCode và xây dựng bản phát hành khi gỡ lỗi
- 3. Phát hành vs Gỡ lỗi Xây dựng Times
- 4. C# Gỡ lỗi và phát hành
- 5. Giá trị float hoạt động khác nhau trên bản phát hành và gỡ lỗi xây dựng
- 6. Trong Delphi 7, tôi có thể thiết lập chế độ 'Gỡ lỗi' và 'Phát hành' không?
- 7. Làm thế nào để kiểm soát chế độ xây dựng (gỡ lỗi hoặc phát hành) trong cmake?
- 8. Cách kiểm tra xem tệp thi hành hoặc DLL có được xây dựng trong chế độ Phát hành hoặc Gỡ lỗi (C++)
- 9. Tách mã gỡ lỗi và phát hành trong C#
- 10. Teamcity không xây dựng .SLN của tôi ở chế độ phát hành
- 11. Chế độ gỡ lỗi và gỡ lỗi trong IDE
- 12. Không thể gỡ lỗi ứng dụng ở chế độ phát hành ngay cả với DebugType = full
- 13. Phát hành Gradle xây dựng vẫn còn có thể gỡ lỗi?
- 14. Lệnh OpenCV đơn giản hoạt động trong chế độ gỡ lỗi nhưng không phát hành chế độ
- 15. Tạo Qt trong chế độ "Phát hành với thông tin gỡ lỗi"?
- 16. Tại sao bạn không thể xây dựng một trang web ở chế độ phát hành?
- 17. Gỡ lỗi xây dựng biên dịch chậm hơn nhiều so với phát hành
- 18. C# tại sao App.config được sao chép vào thư mục gỡ lỗi và phát hành sau khi xây dựng?
- 19. Tại sao biên soạn dự án VS 2010, tạo tệp pdb, khi xây dựng trong chế độ Phát hành và Gỡ lỗi?
- 20. Gỡ lỗi bản phát hành được xây dựng trên máy của khách hàng
- 21. Chế độ phát hành thư viện tĩnh lớn hơn nhiều so với phiên bản chế độ gỡ lỗi
- 22. MSBuild xây dựng mặc định để gỡ lỗi cấu hình
- 23. Cấu hình gỡ lỗi và phát hành
- 24. Làm thế nào để gỡ lỗi trong chế độ phát hành?
- 25. gỡ lỗi vs hiệu suất phát hành
- 26. Bản dựng gỡ lỗi và Bản phát hành trong Android NDK
- 27. Điều gì khác khi xây dựng Debug được chạy với gỡ lỗi và không gỡ lỗi?
- 28. Triển khai ứng dụng cho sản xuất bằng Chế độ gỡ lỗi thay vì Chế độ phát hành?
- 29. MSVCR90D.dll không tìm thấy trong chế độ gỡ lỗi với Visual C++ 2008
- 30. có thể chạy chrome ở chế độ gỡ lỗi không?
bạn đã tìm kiếm trên web một cái gì đó như ** java bằng cách sử dụng khẳng định **? đối với IDEA, nếu bạn nhìn vào /bin/idea.exe.vmoptions, bạn có thể sẽ thấy rằng nó chạy trong chế độ 'Debug' - nếu có cài đặt' -ea' hiện tại :) –
gnat
@gnat, vâng, có '-ea' thiết lập trong' idea.exe.vmoptions'.Nhưng làm thế nào về khi nó xây dựng một tạo phẩm (một tệp jar), vẫn còn trong chế độ "Debug' với một tạo phẩm? – JatSing
trong tệp vmoptions, '-ea' tác động đến cách IDEA chạy (đó là ứng dụng java bạn biết không?) ** không ** mã mà nó tạo. Đối với các lọ, bạn quản lý chế độ của chúng trong thời gian chạy bằng cách chỉ định hoặc bỏ qua '-ea'. Như tôi đã viết, chỉ cần tìm kiếm web cho java khẳng định có rất nhiều hướng dẫn trên rằng – gnat