W języku C# mamy 2 tryby budowania projektów: Debug
i Release
, ciekawe, czy Java ma to samo. Używam IntelliJ IDEA jako Java IDE i do tej pory nie widziałem nigdzie, aby skonfigurować tryb kompilacji, jak w VS IDE.Czy Java ma tryb debugowania i "wydania", jak C#?
Odpowiedz
javac
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
Możesz włączyć symbole debugowania w skompilowanych klasach (jest to ustawienie domyślne) lub tego nie robić. Nie ma wiele korzyści, aby tego nie robić. Pliki jar będą miały wartość a little smaller, ale korzyści związane z wydajnością są minimalne (jeśli występują). Bez tych symboli nie będzie już numerów linii w śladach stosu. Istnieje również opcja włączenia additional symbols with local variable names (domyślnie są tylko nazwy plików źródłowych i numery linii).
java
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
Można również włączyć asercje w czasie wykonywania (domyślnie jest wyłączona), co jest czasem przydatne podczas programowania i testowania. Ma to wpływ na wydajność (jeśli dany kod rzeczywiście korzystał z asercji, które moim zdaniem są uncommon).
Niezależnie od tych ustawień JVM zawsze umożliwia dołączenie debuggera.
To, czego nie ma Java, to kompilacja warunkowa, w której skompilowany zostałby zupełnie inny kod na podstawie niektórych ustawień zewnętrznych. Najbliższe, co możesz uzyskać, to coś takiego, jak public static final boolean DEBUG_BUILD = true;
gdzieś w kodzie i użyj tego w instrukcjach if. Dzięki temu kompilator wykluczy kod, który stanie się nieosiągalny, ale musisz ustawić tę stałą w kodzie źródłowym.
tak czy inaczej, aby 'public static final boolean DEBUG_BUILD' na preproces, coś jak' # ifdebug' w C#? – JatSing
@JatSing: Nie bezpośrednio. Możesz mieć jakiś skrypt, który aktualizuje wartość przed uruchomieniem kompilatora. A może masz Constants.java i dwie wersje tego i ustawiasz ścieżkę klas kompilacji dla jednego z nich. Ale nic w oficjalnym toolchain. – Thilo
Pytasz o różne rodzaje kompilacji do kompilacji w różnych rzeczach, jak sądzę. Na przykład, aby mieć Debug.WriteLine i Console.WriteLine.
"Nie, Java nie ma ścisłego dopasowania do tej funkcji. Można użyć aspektów lub użyć kontenera IOC do wstrzyknięcia różnych klas implementacji." ukradł to z następującym pytaniem: Conditional Java compilation
(są tam inne miłe odpowiedzi na ciebie tam)
Jest to normalna praktyka w Javie, aby zwolnić wszystko jest sposób, który może być pozbawione błędów. W przypadku niektórych projektów, które wymagają zaciemniania, mogą one zawierać kompilację wydania, ale nigdy nie widziałem tego od 12 lat programowania Java.
Rzeczy takie jak asercje i komunikaty debugowania są zwykle wyłączane w środowisku wykonawczym dla instancji produkcyjnej, ale można je włączyć w dowolnym momencie (nawet dynamicznie), jeśli jest to wymagane.
IMHO Najlepszą praktyką jest używanie tej samej wersji w każdym środowisku, a nie tylko w tym samym źródle, ale w tych samych JAR-ach. Daje to największą szansę, że jeśli zadziała w teście, zadziała w produkcji i jeśli masz problem z produkcją, możesz go ponownie wyprodukować w teście.
Ponieważ tak wiele kodu Java jest napisane w ten sposób, JIT jest bardzo dobry w optymalizacji martwego kodu, który nigdy nie jest wywoływany. Tak bardzo, że IMHO większości mikro- "benchmarków", w których Java out wykonuje C++, jest wtedy, gdy benchmark nic nie robi, a JIT lepiej to wykrywa. IMHO, C++ zakłada, że programista jest wystarczająco inteligentny, aby nie pisać kodu, który nic nie robi.
"Nigdy nie widziałem tego od 12 lat prac nad Javą". Dla mnie jest to najważniejsza część twojej odpowiedzi, gdy piszesz Javę dla HFT (!). Czy to oznacza, że kompilowanie kodu Java w celu uwzględnienia wszystkich informacji dotyczących debugowania powoduje/nie wpływa na JIT JVM? Zakładam, że tak, ale proszę o potwierdzenie. – kevinarpe
- 1. C# XNA Visual Studio: Różnica między trybami "wydania" i "debugowania"?
- 2. Jak zakończyć tryb "debugowania"?
- 3. Jak mogę skonfigurować plik Makefile do kompilacji debugowania i wydania?
- 4. Czy Notepad ++ ma tryb blokowania?
- 5. Brak debugowania i wydania mrówki nie powiodło się
- 6. KDevelop z projektem CMake - jak zarządzać wersjami debugowania i wydania?
- 7. Tryb debugowania Przez ignorowanie
- 8. Jak włączyć tryb pełnego debugowania w FastMM4?
- 9. Używanie różnych bibliotek DLL do debugowania i kompilacji wydania
- 10. Jak znaleźć i włączyć tryb debugowania USB na Nexusie 4
- 11. z Objective-C i awarią kodu Swift po uruchomieniu w trybie zwolnienia, tryb debugowania grzywny
- 12. usuwa ciągi debugowania w wersji wydania
- 13. Mieszanie biblioteki debugowania i wydania/binarnej - zła praktyka?
- 14. .NET Lista różnych odnośników do debugowania/wydania
- 15. Czy Mongo DB ma tryb In-Memory?
- 16. Konfiguracje wydania/debugowania z Flash + AS3
- 17. facelet tryb debugowania nie pracuje
- 18. Czy java ma odpowiednik C# "using" klauzula
- 19. Dlaczego mój projekt MVC4 nie ma folderów debugowania i wydania w folderze bin?
- 20. Xcode/Cocoa: Jakie są różnice między kompilacjami debugowania i wydania?
- 21. C# - Atrybut pomija metodę, gdy wkracza w tryb debugowania
- 22. React Native "Brak adresu URL pakietu" Tylko tryb wydania
- 23. Jak ustawić inną konfigurację qmake w zależności od debugowania/wydania?
- 24. Czy Java ma właściwości automatyczne?
- 25. Czy Java ma odpowiednik StringStream?
- 26. Tryb Phonegap bez debugowania i podpisywanie za pomocą klucza licencyjnego
- 27. Uruchom tryb debugowania z wiersza polecenia
- 28. W programie Visual Studio, jak dodać przypadki specjalne dla wersji debugowania i wydania?
- 29. Tryb Tuareg i tryb Caml
- 30. Dlaczego obliczenia zmiennoprzecinkowe i rzutowanie pokazują inny wynik w konfiguracji debugowania i wydania?
wyszukiwałeś w Internecie czegoś podobnego ** java używając assert **? jeśli chodzi o IDEA, jeśli zajrzysz do /bin/idea.exe.vmoptions, najprawdopodobniej okaże się, że działa w trybie 'Debugowanie' - jeśli jest obecne ustawienie' -a' :) –
gnat
@gnat, tak, jest Ustawienie "-ea" w pliku 'idea.exe.vmoptions'.Ale co powiesz na to, kiedy buduje artefakt (plik jar), wciąż w trybie "Debugowanie" z artefaktem? – JatSing
w pliku vmoptions, '-ea wpływa na sposób działania IDEA (jest to aplikacja Java, którą znasz?) ** nie ** kod, który buduje. Jeśli chodzi o słoiki, zarządzasz ich trybem w środowisku wykonawczym, podając lub pomijając "-ea". Jak napisałem, po prostu wyszukaj w sieci dla java twierdzenie, że istnieje wiele tutoriali na temat tego – gnat