Bo najlepsza nauka to ta na własnych błędach.
Odtwórz problemy
LiveRecorder for Java to nowo wydana aplikacja do odtwarzania awarii oprogramowania – dostępna tutaj. Umożliwia programistom rejestrowanie awarii aplikacji, a następnie odtwarzanie ich w IntelliJ w celu znalezienia przyczyny niepowodzenia. Pomaga skrócić czas debugowania, szczególnie w przypadku sporadycznych awarii.
Aplikacja rejestruje wszystkie kroki wykonania kodu aplikacji. Zapisywane są instrukcje x86 a więc na poziomie maszyny. Nagranie można odtworzyć, co jest dość podobne do debugowania, z wyjątkiem tego, że działa właśnie poprzez nagranie a nie w aplikacji na żywo. Czemu miałoby to być lepsze? Jest to szczególnie przydatne w przypadku debugowania awarii, które występują tylko od czasu do czasu. Na przykład, gdy wystąpi wyjątek, ponieważ wiele wątków uzyskuje dostęp do tego samego zasobu. Debugowanie sporadycznych błędów w działającej aplikacji jest dość trudne, ponieważ nigdy nie wiadomo, kiedy się pojawią. Dzięki LiveRecorder następuje nagranie awarii, a następnie można ją zdebugować za pomocą funkcji odtwarzania.
Wydajność siada
LiveRecorder może służyć do rejestrowania awarii aplikacji w dowolnym środowisku. Jednak nagrywanie powoduje spowolnienie od 2 do 5 razy dla większości programów. Zespół pracuje nad poprawą wydajności; w międzyczasie prawdopodobnie najlepiej jest unikać uruchamiania go w środowisku produkcyjnym (a jak wiem niestety to w środowisku produkcyjnym najłatwiej jest o napotkanie rzadko spotykanego błędu). Możliwe jest również rejestrowanie niepowodzeń w testach; dostępne są integracje z innym oprogramowaniem – na przykład możliwe jest uruchamianie LiveRecorder jako części potoku CI/CD, na przykład z Jenkins.
W praktyce
Proces jest podzielony na trzy części: nagrywanie, odtwarzanie i debugowanie w IntelliJ. Aplikacje do nagrywania i odtwarzania muszą działać w systemie Linux, IntelliJ może działać na dowolnej platformie.
Agent służy do zapisywania instrukcji aplikacji: -XX:-Inline -XX:TieredStopAtLevel=1 -XX:UseAVX=2 -Dsun.zip.disableMemoryMapping=true -agentpath:/path/to/lr4j-record-1.0.so=save_on=always
.
Dostępne są różne opcje konfiguracyjne, na przykład do skonfigurowania nazwy pliku nagrania. Do ponownego odtworzenia nagrania służy aplikacja do odtwarzania:
/path/to/lr4j/lr4j_replay -i /path/to/recording.undo -cp classpath
Następnie można użyć wtyczki IntelliJ do połączenia się z aplikacją odtwarzania. Po udanym połączeniu czas na debugowanie aplikacji. Najważniejszym dodatkiem wtyczki IntelliJ jest „Oś czasu aplikacji” (Application Timeline).
Posłowie
Oddajmy głos wiceprezesowi Jonathanowi Harrisowi, który powiedział:
LiveRecorder oferuje obsługę języków programowania Java, C / C ++ i Go. Nagranie jest przenośne, co ułatwia udostępnianie nagrań członkom zespołu. Odtwarzać można do przodu i do tyłu. Teoretycznie każdy kod działający na JVM może być już teraz debugowany w narzędziu, w tym Java, Kotlin, Clojure, Scala czy Jython. Formalnie następnym wspieranym językiem stanie się Kotlin.
W planach jest także oficjalna obsługa Scala. Ze względu na głęboką integrację z jądrem Linuksa, obecnie stosowana technologia funkcji Undo koncentruje się na wirtualnej maszynie Java działającej na serwerach. W następnych wersjach deweloperzy LiveRecordera mają się skupić na obsłudze Visual Studio Code i dodawaniu wsparcia dla tej popularnej platformy programistycznej.